2

我在一个测试类中有 5 个测试方法,用@Test. 我也有@Before方法@After。有没有办法@After只为第一个 Test 方法跳过该方法并在其余部分运行它?

4

2 回答 2

2
  1. 如果您希望它有点通用,请在 @Before 中将变量“afterToBeLaunched”设置为 false。在每个需要@After 的测试中,将其设置为 true。当然在@After的开头检查它,如果它是假return的,方法。
  2. 如果您在 4.7 版本之后使用 JUnit,请使用 @Rules。(在 JUnit 中的每个 '@Test' 之后和每个 '@After' 之前应用 '@Rule')您可以使用 Rule 而不是 @After 并使用TestName,您可以在那里读取测试的名称并根据目前结束测试。
于 2012-12-11T10:09:45.643 回答
2

不久前有人问过这个问题,但是在 JUnit 的第 5 版(JUnit Jupiter)中,我们可以使用@TagandTestInfo来完成同样的事情。这个想法是向不需要@AfterEach执行的测试添加一个标签,并用于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.
    }
}

上面的输出看起来像

在每个之前

第一次测试

在每个之前

第二次测试

每次之后

在每个之前

第三次测试

每次之后

于 2018-04-06T13:46:47.370 回答