如何使用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)。