在一个java项目的ant中运行groovy单元测试

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斯波克框架.

Jon*_*Jon 0

看一眼:

http://www.ibm.com/developerworks/java/library/j-pg11094/

有一个 groovyc ant taskdef 用于编译 groovy 测试用例并运行它们。那里的例子是 Maven,但是调整它来完成你想要的事情应该不会太难。