运行Junit @Test忽略@ Before / @ After

时间:2012-12-14 11:59:07

标签: java unit-testing junit

是否可以在具有使用@Test注释的方法的类中运行JUnit @Before方法,但是仅针对此测试忽略@Before方法?

编辑:我感兴趣的是JUnit是否支持此功能,而不是解决方法。我知道解决方法,比如在另一个类中移动测试或删除注释并在每个测试方法中手动调用setUp()

假设在一个类中有30个测试,其中29个@Before确实简化了测试初始化​​,但是对于其中一个(或多个)是无用的/它会使事情变得复杂。

public class MyTestClass {

    @Before
    public void setUp() {
        //setup logic
    }

    @Test
    public void test1() {
        //[...]
    }

    @Test
    public void test2() {
        //[...]
    }

    //more tests here

    @Test(ignoreBefore = true, ignoreAfter = true //false by default)
    //something equivalent to this
    public void test20() {
        //[...]
    }

}

4 个答案:

答案 0 :(得分:5)

您可以使用TestRule执行此操作。请参阅我对Exclude individual test from 'before' method in JUnit的回答。基本上,实现ExternalResource,并在apply方法中,检查方法上是否有特定的注释,如果有,则不要运行before / after方法。你必须专门调用你的规则之前/之后。

答案 1 :(得分:2)

如果它无用则不应该是一个问题 - 再次运行setUp会有害吗?

但我不认为这是可能的,并认为我是一个残缺的特征。

另一种方法 - 将该测试移至单独的测试类。

答案 2 :(得分:0)

对于JUnit 5,您可以使用@Nested批注进行嵌套测试:

         V1                                                                                     V2
1 Therapist                                                                      Okay, we’re back…
2   Patient                                                                               Hmm-hmm.
3 Therapist                                                             … after a couple of hours…
4   Patient                                                                               Hmm-hmm.
5 Therapist Hmm… Catch me up on what you’ve found yourself thinking and feeling after the session.

答案 3 :(得分:0)

补充一下,这是我最近访问该区域时发现的。

Junit / Mockito似乎比@Before注释方法更喜欢测试中定义的模拟行为。