2012-12-14 99 views
10

后是否有可能运行已方法标注了@Before类JUnit的@Test方法,但是忽略只对该测试的@Before方法?运行JUnit @Test忽略@前/ @

编辑:如果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() { 
     //[...] 
    } 

} 
+0

您可以在'@ Before'和'@ After'注释中将'test20'移动到单独的类中吗? – user1516873

+0

@ user1516873从技术上讲,是的,但我想在一个测试类中保留一个类的所有测试。当这个类被设计/开发时,测试不被认为是重构,也不是解决方案。此外,单元测试的定义表明它们是独立的,可以分开运行。 – m3th0dman

回答

2

如果它没用,它不应该是一个问题 - 是否损害再次运行setUp?

但我不认为这是可能的,并寻找我作为一个跛子功能。

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

+1

+1我肯定会在单独的测试课上犯错。显然其他测试有相似之处,需要将它们组合在一起。你的奇怪的一次性测试没有。 –

+0

我真的很好奇,如果JUnit提供此功能,而不是解决方法。为什么它看起来像一个残缺的功能?单元测试的基本定义是不是单元测试应该完全独立于彼此?其他测试不应该关心他们中的一些人是否打电话给@Before方法,其他人则不会。 – m3th0dman

+0

@ m3th0dman这不是测试之间的依赖关系,而是依赖于测试的上下文。使用setUp方法将测试放入一个类中。为什么不执行呢?看起来非常令人惊讶。软件开发中的惊喜令人不快。 – kan