2010-11-26 5 views
4

Я ожидал следующий вывод:Заказ Maven + Surefire + TestNG - BeforeClass, BeforeTest, тест, тест, AfterTest, AfterClass

Running TestSuite 
[DEBUG] beforeClass 
[DEBUG] beforeTest 
[DEBUG] test 
[DEBUG] afterTest 
[DEBUG] beforeTest 
[DEBUG] test 
[DEBUG] afterTest 
[DEBUG] afterClass 

Но вместо этого, это на самом деле происходит. Обратите внимание на 2 проблемы: BeforeClass запускает после BeforeTest. Во-вторых, Before/AfterTest запускает один раз.

Running TestSuite 
[DEBUG] beforeTest 
[DEBUG] beforeClass 
[DEBUG] test 
[DEBUG] test 
[DEBUG] afterClass 
[DEBUG] afterTest 

Вот код.

import org.testng.annotations.AfterClass; 
import org.testng.annotations.AfterTest; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Test; 
public class TestNgAnnoTest { 
    @BeforeClass 
    public void beforeClass(){ 
     System.out.println("beforeClass"); 
    } 
    @BeforeTest 
    public void beforeTest(){ 
     System.out.println("beforeTest"); 
    } 
    @Test 
    public void test1(){ 
     System.out.println("test"); 
    } 
    @Test 
    public void test2(){ 
     System.out.println("test"); 
    } 
    @AfterTest 
    public void afterTest(){ 
     System.out.println("afterTest"); 

    } 
    @AfterClass 
    public void afterClass(){ 
     System.out.println("afterClass"); 
    } 
} 

Для любого любопытного о версиях инструмента: Java MacOSX/1.6.0_22, МВН: 2.2.1, безошибочный 2,6, TestNG 5.14.2

ответ

5

Stupid меня. Confused After/BeforeTest с After/BeforeMethod.

[DEBUG] beforeClass 
[DEBUG] beforeMethod 
[DEBUG] test 
[DEBUG] afterMethod 
[DEBUG] beforeMethod 
[DEBUG] test 
[DEBUG] afterMethod 
[DEBUG] afterClass 

Замена After/BeforeTest произвела правильное упорядочение exec.

@BeforeClass 
    public static void beforeClass(){ 
     log.debug("beforeClass"); 
    } 

    @BeforeMethod 
    public void beforeMethod(){ 
     log.debug("beforeMethod"); 
    } 

    @Test 
    public void test1(){ 
     log.debug("test"); 
    } 

    @Test 
    public void test2(){ 
     log.debug("test"); 
    } 

    @AfterMethod 
    public void afterMethod(){ 
     log.debug("afterMethod"); 

    } 

    @AfterClass 
    public void afterClass(){ 
     log.debug("afterClass"); 
    } 
+0

Делает нас двоих! – jpaugh

3

Исправить. @ BeforeTest/@ AfterTest завершает тег, а не метод тестирования.

Смежные вопросы