Maven+;Surefire&x2B;Testng-课前、课前、课前、课后、课后

Maven+;Surefire&x2B;Testng-课前、课前、课前、课后、课后,maven,testng,surefire,Maven,Testng,Surefire,我期望得到以下结果: Running TestSuite [DEBUG] beforeClass [DEBUG] beforeTest [DEBUG] test [DEBUG] afterTest [DEBUG] beforeTest [DEBUG] test [DEBUG] afterTest [DEBUG] afterClass 但事实上,这种情况确实发生了。注意2个问题:BeforeClass在BeforeTest之后运行。第二,前/后测试运行一次 这是密码 import org.tes

我期望得到以下结果:

Running TestSuite
[DEBUG] beforeClass
[DEBUG] beforeTest
[DEBUG] test
[DEBUG] afterTest
[DEBUG] beforeTest
[DEBUG] test
[DEBUG] afterTest
[DEBUG] afterClass
但事实上,这种情况确实发生了。注意2个问题:BeforeClass在BeforeTest之后运行。第二,前/后测试运行一次

这是密码

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,mvn:2.2.1,surefire 2.6,testng 5.14.2,愚蠢的我。将After/BeforeTest与After/BeforeTest方法混淆

[DEBUG] beforeClass
[DEBUG] beforeMethod
[DEBUG] test
[DEBUG] afterMethod
[DEBUG] beforeMethod
[DEBUG] test
[DEBUG] afterMethod
[DEBUG] afterClass
在测试后/测试前进行更换会产生正确的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");
    }

对@BeforeTest/@AfterTest包装标签,而不是测试方法

    @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");
    }