Java 无法使用ant运行类别中的所有junit测试

Java 无法使用ant运行类别中的所有junit测试,java,testing,junit,ant,Java,Testing,Junit,Ant,背景 我正在尝试创建一个Ant脚本: 编译源文件 编译junit测试 运行特定类别的junit测试 到目前为止,我所做的大部分工作都是从别人那里取走的 这是到目前为止我在ant脚本中的内容: <?xml version="1.0"?> <project name="junit_tests"> <property name="build-main" location="build/main"/> <property name="build-te

背景

我正在尝试创建一个Ant脚本:

  • 编译源文件
  • 编译junit测试
  • 运行特定类别的junit测试
到目前为止,我所做的大部分工作都是从别人那里取走的

这是到目前为止我在ant脚本中的内容:

<?xml version="1.0"?>
<project name="junit_tests">
  <property name="build-main" location="build/main"/>
  <property name="build-test" location="build/main"/>
  <property name="src-test" value="java/test" />
  <property name="src-com" value="java/com" />
  <property name="src-lib" value="webapp/WEB-INF/lib" />
  <property name="test-lib" value="java/test/lib" />
  <path id="classpath">
    <fileset dir="${src-lib}" includes="*.jar"/>
    <fileset dir="${test-lib}" includes="*.jar" />
  </path>
  <path id="classpath.test">
    <path refid="classpath"/>
    <pathelement location="${build}"/>
  </path>
  <target name="init">
    <mkdir dir="${build-main}" />
    <mkdir dir="${build-test}" />
  </target>

  <target name="compileSrc" depends="init" description="compile src files ">
    <javac debug="on" destdir="${build-main}" encoding="UTF-8" fork="true" memorymaximumsize="1024m" includeantruntime="true">
      <src path="${src-com}" />
      <classpath refid="classpath"/>
    </javac>
    <javac debug="on" destdir="${build-main}" encoding="UTF-8" fork="true" memorymaximumsize="1024m" includeantruntime="true">
      <src path="${src-test}" />
      <classpath refid="classpath"/>
    </javac>
  </target>


  <!-- Test and build all files  -->
  <!-- To run this: use "ant" (default) or "ant run" -->
  <target name="run" depends="compileSrc">
    <junit printsummary="on" haltonfailure="no" fork="true">
        <classpath>
          <path refid="classpath.test" />
          <pathelement location="${build-test}"/>
        </classpath>
        <formatter type="xml" />
        <batchtest>
            <fileset dir="${build-main}" includes="**/NonDBTest.class" />
        </batchtest>
    </junit>
  </target>
</project>
问题
我做错了什么?我尝试将
NonTestDB
更改为类。我已经尝试过实现这个接口,但到目前为止没有任何效果。如何让junit运行
NonTestDB
类别中的所有类?我遗漏了什么吗?

使用JUnit类别更容易使用
maven
,因为您可以通过属性配置类别运行

我怀疑
ant
中是否有对类别的明确支持,并且我不认为您可以
在测试任务中包含一个JUnit类别接口(就像您看起来做的那样)

解决方法是为您的类别创建JUnit套件,然后仅从ant目标运行该套件:

@RunWith(Categories.class)
@IncludeCategory(NonDBTest.class)
@SuiteClasses( { MyTestClass1.class, MyTestClass2.class })
public class NonDBTestSuite {
  // will run only tests annotated with NonDBTest from
  // MyTestClass1 and MyTestClass2.
}
然后,您的ant配置应该指示应该执行
NonDBTestSuite

<fileset dir="${build-main}" includes="**/NonDBTestSuite.class" />

请注意,您所引用的也定义了此套件


其中不太好的部分是您需要维护所有的套件类。我对多个类别所做的是维护一个包含所有测试类的
AllTests
suite。较小的套件将在
SuiteClasses
注释中使用此
AllTests

使用JUnit类别在
maven
中更容易,因为您可以通过该属性配置要运行的类别

我怀疑
ant
中是否有对类别的明确支持,并且我不认为您可以
在测试任务中包含一个JUnit类别接口(就像您看起来做的那样)

解决方法是为您的类别创建JUnit套件,然后仅从ant目标运行该套件:

@RunWith(Categories.class)
@IncludeCategory(NonDBTest.class)
@SuiteClasses( { MyTestClass1.class, MyTestClass2.class })
public class NonDBTestSuite {
  // will run only tests annotated with NonDBTest from
  // MyTestClass1 and MyTestClass2.
}
然后,您的ant配置应该指示应该执行
NonDBTestSuite

<fileset dir="${build-main}" includes="**/NonDBTestSuite.class" />

请注意,您所引用的也定义了此套件


其中不太好的部分是您需要维护所有的套件类。我对多个类别所做的是维护一个包含所有测试类的
AllTests
suite。较小的套件将在
suitelasses
注释中使用此
AllTests

我已经为链接添加了一个答案,可以通过ant运行特定
类别的测试。我已经为链接添加了一个答案,可以通过ant运行特定
类别的测试。