我正在编写一些从第三方库扩展类的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 {
}
}
不扩展第三方测试类不是一种选择。 (对于它的价值,它的Spring AbstractXmlFlowExecutionTests
反过来扩展了其他Spring类,最终扩展了TestCase
。超类中的方法提供了很多设置和样板,没有扩展这些只是为了使用JUnit 4会适得其反)
如上所述,我们使用JUnit 4' @Test
注释的动机之一是它允许我们更好地命名我们的方法。我们的观点是test
这个词是多余的,因为该类显然是一个测试类,并且该方法用@Test
注释。我们以BDD样式编写测试,因此我们的测试方法名称描述了被测单元应该做什么 - 我们的命名约定是public void shouldDoSomething()
是否有人知道是否可以将使用JUnit 4 TestCase
的方法扩展JUnit 3 @Test
的测试类进行混合匹配? ,如果是的话,怎么样?
感谢
森
<小时/> 我已经看到了几个与问题相关的SO问题,但它们与Android或测试套件有关,因此与我的问题并不完全相同。 EG:
答案 0 :(得分:5)
JUnit4样式测试不应直接或间接扩展junit.framework.TestCase
。如果这样做,您经常会遇到令人困惑的行为(由@Rule
注释的字段被忽略,测试失败,因为JUnit没有调用基类方法等)。测试可以以JUnit4风格或JUnit3风格运行,具体取决于它们的运行方式。
您的选择要么坚持使用JUnit3,要么说服基类的维护者创建支持JUnit4的类(规则,运行器等)。