Java 对于一个测试方法,在方法之后是否有JUNIT注释可以跳过?

Java 对于一个测试方法,在方法之后是否有JUNIT注释可以跳过?,java,junit,annotations,Java,Junit,Annotations,在一个用@test注释的测试类中,我有5个测试方法。 我也有@Before和@After方法。有没有办法只在第一个测试方法中使用@After跳过该方法,并在其余测试方法中运行它 如果您希望它有点通用性,请在@Before中将变量“afterToBeLaunched”设置为false。在每个需要@After的测试中,将其设置为true。当然,在@After开头检查它,如果它为false,返回该方法 如果在4.7版本之后使用JUnit,请使用@Rules。()您可以使用Rule而不是@After和u

在一个用
@test
注释的测试类中,我有5个测试方法。 我也有
@Before
@After
方法。有没有办法只在第一个测试方法中使用
@After
跳过该方法,并在其余测试方法中运行它

  • 如果您希望它有点通用性,请在@Before中将变量“afterToBeLaunched”设置为false。在每个需要@After的测试中,将其设置为true。当然,在@After开头检查它,如果它为false,
    返回该方法
  • 如果在4.7版本之后使用JUnit,请使用@Rules。()您可以使用Rule而不是@After和using,您可以在那里读取测试的名称,并根据当前结束的测试执行完成操作

  • 这个问题不久前就被问到了,但是对于JUnit的版本5(JUnitJupiter),我们可以使用
    @Tag
    TestInfo
    来完成同样的事情。其思想是在每次执行
    后,向测试中添加一个不需要执行
    @的标记,并使用
    TestInfo
    确定当前测试是否包含该标记。在代码中,这可能类似于

    class TestSuite {
        @BeforeEach
        void beforeEach() {
            System.out.println("BeforeEach");
            // Set-up logic.
        }
    
        @AfterEach
        void afterEach(TestInfo testInfo) {
            if(testInfo.getTags().contains("SkipCleanup")) {
                return;
            }
    
            System.out.println("AfterEach");
    
            // Perform cleanup logic.
        }
    
        @Test
        @Tag("SkipCleanup")
        void myTestWithoutCleanup() {
            System.out.println("First Test");
            // Test logic.
        }
    
        @Test
        void myTestWithCleanup() {
            System.out.println("Second Test");
            // Test logic.
        }
    
        @Test
        void myOtherTestWithCleanup() {
            System.out.println("Third Test");
            // Test logic.
        }
    }
    
    上面的输出如下所示

    之前

    第一次测试

    之前

    第二次测试

    之后

    之前

    第三次测试

    之后


    通过跳过
    @After
    方法,您到底想要实现什么?据我所知,您不能跳过标记为@After的方法的执行。为了测试的可读性,在进行测试之前,您可能应该三思而后行。但是,如果您真的想这样做,您可以在测试类中添加一个
    布尔runAfter
    字段,并在第一个方法中将其设置为
    false
    。此外,在
    @After
    方法中添加
    if(runAfter){/*After-code*/}
    。非常感谢。这真的很有帮助。还需要知道,当我运行两个测试时,与其他测试方法相比,第一个测试总是需要更多的时间来执行。有什么原因吗?像Mockito这样的模拟框架在第一次用于执行时需要几百毫秒才能启动。