2016-07-29 4 views
0

у меня есть тест, как это:TestNG класс повторных попыток не запускается методы @BeforeClass ни @AfterClass

public class Test1 extends AbstractTest { 

    @Test(retryAnalyzer=Retry.class) 
    public void test(){ 
     System.out.println(this.getClass().getName() + " running."); 
     Assert.fail(); 
    } 

} 

С установки и демонтажа методы, как это:

public class AbstractTest { 

    @BeforeClass(alwaysRun = true) 
    public void setup() { 
     System.out.println(this.getClass().getName() + " initialized"); 
    } 

    @AfterClass(alwaysRun = true) 
    public void tearDown(){ 
     System.out.println(this.getClass().getName() + " complete"); 
    } 

} 

А класс повторных попыток, как это:

public class Retry implements IRetryAnalyzer { 

    private int retryCount = 0; 
    private int maxRetryCount = 1; 

    public boolean retry(ITestResult result) { 
     if (retryCount < maxRetryCount) { 
      retryCount++; 
      return true; 
     } 
     return false; 
    } 

} 

Но методы установки и tearDown не выполняются до и после метода тестирования, несмотря на то, lwaysRun до истины. Вот несколько консольных выходов:

tests.Test1 initialized 
tests.Test1 running. 
tests.Test1 running. 
tests.Test1 complete 

Почему это? Как я могу заставить их запускать каждый раз при повторном тестировании?

+0

О чем вы расскажете, как работает testng. Зачем тебе это? – juherr

ответ

0

Аннотации org.testng.annotations.BeforeMethod и org.testng.annotations.AfterMethod будет вести себя, как вам требуется, - другими словами, запустить установку и рушить код перед каждым вызовом метода испытаний, независимо от того, было ли оно вызвано повторить попытку.

Полная документация в TestNG javadoc для @BeforeMethod и @AfterMethod.

+0

Использование \ @BeforeMethod и \ @AfterMethod работает так, как мне нужно. Большое спасибо. – item5

2

Это поведение, как в дизайне.

@BeforeClass: аннотированный метод будет запущен до того, как будет запущен первый метод тестирования в текущем классе.

  • В вашем случае это setup, он будет печатать инициализируется.
  • setup никогда не будет работать снова, пока тот же класс не будет перезагружен для выполнения.

@AfterClass: аннотированный метод будет работать после того, как все методы испытаний в текущем классе было бежать.

  • В вашем случае это tearDown, он будет работать после того, как все методы испытаний, включая все попытки повторить в текущем классе были работать и печатать полный.

Примечание: retry(ITestResult result) возвращает истину, если метод испытаний должен быть повторен, ложь в противном случае. Таким образом, следует ли повторять попытки тестирования или нет, будет определяться методом retry. Поведение @BeforeClass и @AfterClass остается неизменным.

Надеюсь, это уточнит.