unit-testing - 在 ant 中为 java 项目运行 groovy 单元测试

标签 unit-testing ant groovy

我有一个 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>

但是,这种方法不适用于 groovy 测试,因为这些测试位于 *.groovy 文件和 JUnit Ant task 中。 ,可以理解的是,在文件集中中无法识别它们。

另一种方法是使用*.class文件进行batchtestfileset,如下所示:

<batchtest fork="yes" todir="${test.dir}/report">
    <fileset dir="${test.dir}/${build.dir}">
        <include name="**/*Test*.class" />
    </fileset>
</batchtest>

这会产生漏报,因为闭包类文件也包含在内,因此可能的解决方法是排除这些文件。

<batchtest fork="yes" todir="${test.dir}/report">
    <fileset dir="${test.dir}/${build.dir}">
        <include name="**/*Test*.class" />
        <exclude name="**/*$*.class" />
    </fileset>
</batchtest>

是否有更好的方法来识别 junit ant 任务的测试类?也许基于反射和 @Test 属性手动列出所有测试类(这将工作得很好)并不是一个真正可维护的解决方案。类似 Spock framework 中的 SpecClassFileSelector .

最佳答案

将包含模式更改为 *Test 而不是 *Test* 怎么样? 正如@jon-skeet建议的here .

这样它就不会匹配匿名闭包类。

您必须重命名现有的类并要求开发人员遵循此模式。

关于unit-testing - 在 ant 中为 java 项目运行 groovy 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716539/

相关文章:

unit-testing - 使用 Cakephp 在组件单元测试中模拟 AuthComponent

java - 如何使用tomcat使用eclipse webtool创建adempiere自定义模板的web ui工作区

groovy - 如何将标准输出从 groovy 方法传输到字符串中

java - 用户如何(安全地)用 Java 编写自己的过滤器

java - 如何在 java 中对 jdbc 代码进行单元测试?

objective-c - iOS - 对 viewController 进行单元测试?

java - 如何在jar中包含静态文件

testing - Grails war 并包含测试

c# - 重写操作系统查询方法以使其可测试

java - 难以使用 Ant 构建 Pig