2015-09-04 59 views
0

我正在写一些JUnit测试,从第三方库扩展一个类。超类延伸TestCase,所以根据定义,我的子类也是如此。我可以混合使用JUnit 3和JUnit 4吗?

在我的子类中,我编写了测试方法,前缀为test,这些都会被执行。

然而,有许多原因,我们想移动到JUnit 4中(这些原因之一是,我们不希望有前缀test测试方法)

我试图简单地写我的使用JUnit 4 @Test注释进行新测试,但这些方法不会被执行。
例如:

public abstract class UtilityClassFromThirdPartyLibrary extends TestCase { 

} 

public class MyTestClass extends UtilityClassFromThirdPartyLibrary { 

    public void testThisMethodIsInvokedBecauseItStartsWithTest { 
    } 

    @Test 
    public void thisMethodDoesNotGetInvoked { 
    } 
} 

不延长的第三方测试类是不是一种选择。 (值得注意的是,Spring的AbstractXmlFlowExecutionTests反过来扩展了其他Spring类,最终扩展为TestCase。超类中的方法提供了如此多的设置和样板,而不是仅仅使用JUnit 4扩展这些类将会适得其反)

如前所述,我们使用JUnit 4的@Test注解的动机之一是它允许我们更好地为我们的方法命名。我们的观点是test这个词是多余的,因为该类明显是一个测试类,并且该方法用@Test进行了注释。我们用BDD风格编写我们的测试,所以我们的测试方法名称描述了被测单元应该做什么 - 我们的命名约定是public void shouldDoSomething()

有谁知道它是否可能混合使用扩展的测试类JUnit 3的TestCase与使用JUnit 4的@Test?的方法,如果是,如何?

感谢
弥敦道


我已经看到了几个,涉及到相同的问题,所以问题,但它们与Android或测试套件,所以不如完全一样我题。 EG:
Is it possible to mix JUnit3 and JUnit4?
https://stackoverflow.com/questions/32393330/run-junit-3-and-junit-4-tests-in-the-same-class

+0

你将如何运行你的测试? Maven的?的IntelliJ?蚀? –

+0

是的,应该提到,测试是作为我们的Maven构建的一部分运行的,但也在开发人员IDE中(我们可以选择我们的IDE,并使用IntelliJ和Eclipse) –

+0

您是否尝试过使用'@ RunWith'注释[spring junit runner](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/test/context/junit4/SpringJUnit4ClassRunner.html)? –

回答

5

JUnit4风格测试,不得直接或间接地延长junit.framework.TestCase。如果这样做,您经常会遇到混淆的行为(由@Rule注释的字段被忽略,由于基类方法未被JUnit调用等而导致测试失败)。测试可以运行为JUnit4风格或JUnit3风格,具体取决于运行方式。

你的选择要么坚持使用JUnit3,要么说服基类的维护者创建支持JUnit4(Rules,Runners等)的类。

+0

谢谢 - 虽然它不提供解决方案,但它确实回答了核心问题,因为无法混合使用Junit 3和4.谢谢:) –