我在类似于此答案中所述的设置中使用了JUnit Categories和ClassPathSuite 。回顾一下:
public interface FastTests {
}
@RunWith(Categories.class)
@Categories.IncludeCategory(FastTests.class)
@Suite.SuiteClasses(AllTests.class)
public class FastTestSuite {
}
@RunWith(ClasspathSuite.class)
public class AllTests {
}
...其中AllTests使用ClasspathSuite库。
FastTests类别中的测试类如下所示:
@Category(FastTests.class)
public class StringUtilsTest {
// ...
}
当我在IDE中运行“ FastTestSuite”时,所有带有FastTests批注的测试都会很好且顺利地执行:
现在,我想对Ant进行同样的操作。(令我惊讶的是,我无法轻松地在SO上找到相关的说明。)换句话说,我需要一个Ant目标,该目标运行带有FastTests批注的所有测试。
我已经尝试过使用<test>
或<batchtest>
...
<junit showoutput="true" printsummary="yes">
<test name="fi.foobar.FastTestSuite"/>
<formatter type="xml"/>
<classpath refid="test.classpath"/>
</junit>
……到目前为止,还没有运气。
编辑:除了IDE,它在命令行上可以与JUnitCore一起正常工作:
$ java -classpath "classes:WebContent/WEB-INF/lib/*" org.junit.runner.JUnitCore fi.foobar.FastTestSuite
.............
Time: 0.189
OK (13 tests)
是的,我可以<batchtest>
很简单地使用它:
<junit showoutput="true" printsummary="yes" fork="yes">
<formatter type="xml"/>
<classpath refid="test.classpath"/>
<batchtest todir="${test.reports}">
<fileset dir="${classes}">
<include name="**/FastTestSuite.class"/>
</fileset>
</batchtest>
</junit>
我已经尝试<batchtest>
过了,但是却犯了一个愚蠢的错误,那就是使用"**/FastTestSuite.java"
而不是"**/FastTestSuite.class"
在<include>
元素中...抱歉:-)
注意:有必要进行设置fork="yes"
(即在单独的VM中运行测试);否则,这也会在java.lang.reflect.Constructor.newInstance(Constructor.java:513)处产生“ initializationError”,例如<test>
(请参阅问题注释)。但是,<test>
即使使用,我也无法工作fork="yes"
。
该唯一的缺憾是,这将产生只有一个JUnit的XML报告文件(TEST-fi.foobar.FastTestSuite.xml),这使得它看起来像所有的(几百个)的测试是在一个类(FastTestSuite)。如果有人知道如何调整此设置以在其原始类和程序包中显示测试,请告诉我。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句