【问题标题】:Can Ant categorise JUnit tests based on inheritance hierarchy?Ant 可以根据继承层次对 JUnit 测试进行分类吗?
【发布时间】:2011-09-06 08:26:01
【问题描述】:

我正在处理一个遗留项目:

  • 纯单元测试
  • 集成测试(运行缓慢;有各种讨厌的依赖项)

我正在寻找使用 Ant 分别运行两种类型的测试的最简单的方法

不知道有没有办法让 Ant 根据继承层次自动识别这两个类别:

StringUtilsTest extends TestCase  // "pure unit test"

ProductionDBTest extends AbstractTransactionalTesterBase // "integration test"

集成测试基于抽象超类的层次结构,但它们都归结为一些 Spring 测试类,最终是 AbstractSpringContextTests 扩展 junit.framework.TestCase

换句话说,我能否在 Ant 中区分(间接)扩展 AbstractSpringContextTests 的测试和直接扩展 TestCase 的测试?或者我是否必须手动进行测试,例如将它们放在单独的 Categories 或 TestSuites 中? (有很多个测试,所以我不想这样做。)


解决方案:我尝试了 Sean 的(非常有前途的)approach,但无法(轻松地)让它工作。所以我最终还是半手动地完成了测试,使用this SO question 中描述的设置注释纯测试(这是较小的组),并使用 Ant like this 运行它们。 (请注意,不需要编写自定义 TestRunner。)

【问题讨论】:

    标签: java ant junit automated-tests build-automation


    【解决方案1】:

    我们用于对 JUnit 测试进行分类的解决方案是使用自定义注解。然后,您可以使用自定义的 TestRunner,它可以指定一个标志或参数来确定要运行的测试类型或所有测试类型。

    抱歉,没有示例代码,但创建注释和 TestRunner 非常基本,试试吧!

    【讨论】:

    • 我最终还是选择了注释,所以我可能会接受这一点,但是……我对您提倡的自定义 TestRunner 有疑问。 :) 从来没有写过一个,它似乎并不对我来说很简单,基于一段时间的谷歌搜索。幸运的是,不需要自定义 TestRunner,因为您可以使用 this! 之类的设置
    【解决方案2】:

    简单的方法是以测试类型结尾的测试类命名

    假设我们正在测试日期。

    DateTest.java(快速正常测试)

    DateSysTest.java(长时间运行)

    然后有两个目标,其中一个是快速单元测试的目标

       <batchtest todir="your dir">
          <!--Run unit tests for each class with suffix Test, unless it is SysTest or StressTest-->
          <fileset dir="${src}/test"
            includes="**/*Test.java"
            excludes="**/*StressTest.java **/*SysTest.java" />
        </batchtest>
    

    然后,您创建了一些 ant 目标,一个用于快速测试,一个用于 sys 测试,一个用于所有目标......类似的东西。 也就是说,如果您可以重命名您的测试类。

    【讨论】:

    • +1 我的回答是关于使用注释来区分测试类型。这很好,因为它不会因为担心构建错误而阻止人们重命名测试。话虽如此,可以有效地使用命名约定,如果是这样,该解决方案更易于理解和实施。
    • 这次不是我最终使用的,但无论如何 +1,因为这是一种经过验证的(尽管是老派的)分离测试类别的方法,可以轻松使用大多数工具(IDE、Ant)等)。
    【解决方案3】:

    请注意,我自己没有使用过这个。但我知道您将单元测试表达为作为资源集合运行,并且可以使用restrictions 定义这些测试。而且,一种可能的限制是“instanceof”,它允许您根据超类选择类。这使您可以选择集成测试,然后使用资源集合“差异”功能可以选择其他所有内容。不算太糟糕,如果不是微不足道的话。我认为这适用于 Ant 1.8+。

    【讨论】:

    • 谢谢,看起来很有趣!我在让instanceof 工作时遇到问题......不太确定你应该如何在项目文件中引入 antlib“org.apache.tools.ant.types.resources.selectors” - 通过放置属性 xmlns :rsel="antlib:org.apache.tools.ant.types.resources.selectors" 在项目元素还是什么?哦,那我明天继续。使用 Ant 1.8.1 应该不会有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 2012-06-23
    • 2010-10-23
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多