我可以混合使用JUnit 3和JUnit 4吗?

Nat*_*ell 0 java junit4 junit3

我正在编写一些JUnit测试,它们从第三方库扩展了一个类.超类扩展TestCase,所以根据定义,我的子类也是如此.

在我的子类中,我用前缀编写测试方法,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 {
    }
}
Run Code Online (Sandbox Code Playgroud)

不扩展第三方测试类不是一种选择.(对于它的价值,它是Spring,它AbstractXmlFlowExecutionTests反过来扩展了其他Spring类,最终扩展TestCase.超类中的方法提供了如此多的设置和样板,没有扩展它们只是为了使用JUnit 4会适得其反)

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

有没有人知道是否有可能混合' TestCase使用JUnit 4的方法扩展JUnit 3的''匹配测试类@Test?如果是这样,怎么样?

谢谢
内森


我已经看到了几个与问题相关的SO问题,但它们与Android或测试套件有关,因此与我的问题不完全相同.EG:
可以混合JUnit3和JUnit4吗?
/sf/ask/2267533131/

Nam*_*ter 5

JUnit4样式测试不应junit.framework.TestCase直接或间接扩展.如果这样做,您经常会遇到混乱的行为(由@Rule忽略注释的字段,测试失败,因为JUnit没有调用基类方法等).测试可以以JUnit4风格或JUnit3风格运行,具体取决于它们的运行方式.

您可以选择坚持使用JUnit3,或者说服基类的维护者创建支持JUnit4(规则,运行器等)的类.