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

Can I mix JUnit 3 and JUnit 4?

我正在编写一些从第三方库扩展 class 的 JUnit 测试。 super class 扩展了 TestCase,所以根据定义,我的 subclass.

也是如此

在我的子class中,我用前缀 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 {
    }
}

不扩展第 3 方测试 class 不是一个选项。 (就其价值而言,它是 Spring 的 AbstractXmlFlowExecutionTests,它又扩展了其他 Spring classes,最终扩展了 TestCase。super 中的方法classes 提供了如此多的设置和样板,如果不简单地扩展这些以使用 JUnit 4 将会适得其反)

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

有谁知道是否可以将扩展 JUnit 3 TestCase 的'n'匹配测试 class 与使用 JUnit 4 @Test 的方法混合使用?如果可以,怎么样?

谢谢
内森


我已经看到几个属于同一问题的 SO 问题,但它们与 Android 或测试套件有关,因此与我的问题不完全相同。例如:
Is it possible to mix JUnit3 and JUnit4?

JUnit4 样式测试不应直接或间接扩展 junit.framework.TestCase。如果这样做,您通常会遇到令人困惑的行为(被 @Rule 注释的字段被忽略,测试失败,因为基 class 方法没有被 JUnit 调用,等等)。测试可能是 运行 作为 JUnit4 风格或 JUnit3 风格,具体取决于它们如何 运行。

您的选择是要么坚持使用 JUnit3,要么说服您的基础 class 的维护者创建 class 支持 JUnit4 的系统(规则、运行程序等)。