如何使用Ant在类别/套件中运行所有JUnit测试?
我在类似于本答案中描述的设置中使用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上轻松找到相关说明。)换句话说,我需要一个使用FastTests注释运行所有测试的Ant目标。
我使用或
尝试了一些简单的方法……
……但到目前为止没有运气。
编辑 :除了IDE,它在命令行上与JUnitCore一起正常工作:
$ java -classpath "classes:WebContent/WEB-INF/lib/*" org.junit.runner.JUnitCore fi.foobar.FastTestSuite ............. Time: 0.189 OK (13 tests)
是的,我非常简单地使用
:
我之前尝试过
,但是在
元素中使用"**/FastTestSuite.java"
而不是"**/FastTestSuite.class"
犯了一个愚蠢的错误…抱歉:-)
注意 :有必要设置fork="yes"
(即,在单独的VM中运行测试); 否则这也会在java.lang.reflect.Constructor.newInstance(Constructor.java:513)中产生“initializationError”,如
(参见问题评论)。 但是,即使使用fork="yes"
,我也无法使
工作。
唯一的缺点是它只生成一个JUnit XML报告文件(TEST-fi.foobar.FastTestSuite.xml),这使得它看起来像一个类(FastTestSuite)中的所有(数百个)测试。 如果有人知道如何调整它以显示其原始类和包中的测试,请告诉我。
我找到了一个解决方法,使用ant的junit任务来运行特定Category
测试:
通过向ant提供category.name
属性来执行测试,如下所示:
ant -Dcategory.name=FastTests test
使用batchtest
还将为每个测试生成单独的JUnit XML报告文件(例如TEST-fi.foobar.FastTestClassN.xml)。