背景
我正在尝试创建一个Ant脚本:
到目前为止,我所做的大部分工作都取自this question。
到目前为止,这是我在蚂蚁脚本中的内容:
<?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>
junit任务的输出
运行: [junit]警告:在junit的路径中检测到多个版本的ant [junit] jar:file:/usr/local/Cellar/ant/1.9.7/libexec/lib/ant.jar!/org/apache/tools/ant/Project.class [junit]和jar:file:/Users/arnab/work/my_project/webapp/WEB-INF/lib/ant.jar!/org/apache/tools/ant/Project.class [junit]运行test.NonDBTest [junit]测试运行:2,失败:0,错误:2,跳过:0,经过的时间:0.178秒
建立成功总时间:37秒
问题
此类NonDBTest
中的测试类总共有7个测试,因此junit显然没有运行所有测试类。
NonDBTest.java
只是一个没有方法的接口,这就是我的测试类看起来像
@Category(NonDBTest.class)
public class MyTestClass extends AbstractTestCase{
....
@Test
public void testA(){ ... }
@Test
public void testB(){ ... }
@Test
public void testC(){ ... }
@Test
public void testD(){ ... }
@Test
public void testE(){ ... }
}
问题
我究竟做错了什么?我尝试将NonTestDB
更改为班级。我尝试过实现界面但到目前为止还没有任何工作。如何让junit运行NonTestDB
类别中的所有类?我错过了什么吗?
答案 0 :(得分:0)
使用maven
可以更轻松地使用JUnit类别,因为您可以通过group属性配置要运行的类别。
我怀疑ant
中是否明确支持类别,我认为您无法在测试任务中include
JUnit类别界面(如你似乎这样做。)
解决方法是为您的类别创建一个JUnit Suite ,然后仅从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.
}
然后你的蚂蚁配置应该表明应该执行NonDBTestSuite
。
<fileset dir="${build-main}" includes="**/NonDBTestSuite.class" />
请注意,您所指的answer也定义了此套件。
这个不太好的部分是你需要维护所有的套件类。我对多个类别所做的是使用所有测试类维护一个AllTests
套件。然后,较小的套件会在AllTests
注释中使用此SuiteClasses
。