mfl*_*yan 13 ant groovy unit-testing
我有一个Java项目,其中包含使用JUnit编写的一些单元测试.最近添加了一些新的单元测试,这些测试是用groovy编写的(也使用JUnit),因为它更容易使那些更具表现力且通常更容易阅读.它还允许我们使用spock框架.
该项目是用ant构建和测试的.
在添加groovy类之前,使用以下ant任务运行单元测试:
<target name="test" depends="test-compile">
<junit printsummary="yes">
<classpath>
<path refid="test.classpath"/>
</classpath>
<formatter type="plain"/>
<batchtest fork="yes" todir="${test.dir}/report">
<fileset dir="${test.dir}/unit" includes="**/*.java"/>
</batchtest>
</junit>
</target>
Run Code Online (Sandbox Code Playgroud)
但是,这种方法不适用于groovy测试,因为它们在*.groovy文件中,并且可以理解的是,JUnit Ant任务无法识别它们fileset.
另一种方法是使用这样的*.class文件batchtest fileset:
<batchtest fork="yes" todir="${test.dir}/report">
<fileset dir="${test.dir}/${build.dir}">
<include name="**/*Test*.class" />
</fileset>
</batchtest>
Run Code Online (Sandbox Code Playgroud)
这会产生漏报,因为还包含了闭包类文件,因此可能的解决方法是排除这些文件.
<batchtest fork="yes" todir="${test.dir}/report">
<fileset dir="${test.dir}/${build.dir}">
<include name="**/*Test*.class" />
<exclude name="**/*$*.class" />
</fileset>
</batchtest>
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来确定junit ant任务的测试类?也许一个基于反射和@Test属性手动列出所有测试类(这将非常好地工作)并不是一个真正可维护的解决方案.有点像SpecClassFileSelector从斯波克框架.
看一眼:
http://www.ibm.com/developerworks/java/library/j-pg11094/
有一个 groovyc ant taskdef 用于编译 groovy 测试用例并运行它们。那里的例子是 Maven,但是调整它来完成你想要的事情应该不会太难。