我们有基于Spring 2.0.8的AbstractTransactionalDataSourceSpringContextTests构建的测试类.这些都有很多,所有这些都是用JUnit3风格编写的.
为了使用JUnit 4过滤,我们编写了一个替换JUnit38Runner,它允许我们将这些测试与特定的应用程序环境相匹配,并相应地过滤掉它们.
通过在我们的自定义JUnit38Runner上使用@RunWith注释,整个测试套件在Ant之外运行良好.
但是,当我们尝试在Ant中运行时,它会强制单个测试以junit.framework.TestSuite运行或包装在JUnit4TestAdapter中,两者都忽略JUnit4下的@RunWith注释.更糟糕的是,我们现有的套件被Ant显式覆盖,它直接调用suite()方法,而不是委托给JUnit.
我试图从Ant JUnitTestRunner扩展,并简单地覆盖run()方法,但是该类不是为扩展而编写的.
除了复制整个JUnitTestRunner并对其进行攻击(这将使我们解决脆弱的代码问题),有没有人对解决这个问题的其他方法有什么好运?
我们也遇到了类似的问题,虽然它不像运行 junit 任务那么干净,但解决起来并不是非常困难。我们创建了一个带有 main() 的类,它仅调用 Junit4Runner。它添加了一个 RunListener,尝试以 XML 格式写出 junit 报告输出。这个想法是数据格式比跑步者更不可能改变,所以它不那么脆弱。
我已经删除了大量特定于环境的代码,但这是基本思想。我们test在 ant 中的目标如下所示:
<java failonerror="yes"
fork="true"
classname="com.mycompany.test.Junit4Runner">
<classpath>
<pathelement location="${basedir}/bin" />
<pathelement path="${ProjectTest.classpath}" />
<!-- above classpath includes junit-4.8.1.jar -->
</classpath>
<arg value="${test.class}" />
</java>
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看 runner 类的代码。它不依赖于 Java 6 SE 和 Junit 4.8 之外的任何东西,并且可能与 Java 5 SE 兼容。
| 归档时间: |
|
| 查看次数: |
1353 次 |
| 最近记录: |