我们有基于Spring2.0.8的AbstractTransactionalDataSourceSpringContextTests.构建的测试类有大量这样的代码,它们都是用JUnit3风格编写的。
为了使用JUnit 4过滤,我们编写了一个替换的JUnit38Runner,它允许我们将这些测试与特定的应用程序环境相匹配,并相应地过滤掉它们。
通过在自定义JUnit38Runner上使用@RunWith注释,整个测试套件可以在Ant之外很好地运行。
然而,当我们尝试在Ant中运行时,它会强制单独的测试要么作为junit.framework.TestSuite运行,要么封装在JUnit4TestAdapter中,这两种方式都忽略了JUnit4下的@RunWith注释。更糟糕的是,我们现有的套件被Ant显式地覆盖了,它直接调用suite()方法,而不是委托给JUnit。
我试图从Ant扩展,并简单地覆盖JUnitTestRunner ()方法,但是这个类根本不是为扩展而编写的。
除了复制整个JUnitTestRunner并对其进行黑客攻击(这将使我们面临脆弱的代码问题)之外,有没有人幸运地使用了其他方法来解决这个问题?
发布于 2012-02-18 01:35:45
我们遇到了类似的问题,尽管它不像运行junit任务那样干净,但也不是很难解决。我们创建了一个带有main()的类,这个类只调用Junit4Runner。它添加了一个RunListener,用于尝试以XML格式写出junit报告输出。我们的想法是,数据格式比runner更不容易改变,所以它不那么脆弱。
我已经剥离了相当数量的特定于环境的代码,但这是基本的想法。我们在ant中的test目标如下所示:
<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>您可以查看runner类here的代码。它不依赖于Java 6 SE和Junit 4.8之外的任何东西,并且可能与Java 5 SE兼容。
https://stackoverflow.com/questions/5724435
复制相似问题