Ant可以基于继承层次结构对JUnit测试进行分类吗?

时间:2011-06-01 14:11:29

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

我正在使用具有以下内容的遗留项目:

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

我正在寻找最简单的方法来与Ant一起运行两种类型的测试

我想知道是否有办法让Ant根据继承层次结构自动识别这两个类别:

StringUtilsTest extends TestCase  // "pure unit test"

VS

ProductionDBTest extends AbstractTransactionalTesterBase // "integration test"

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

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


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

3 个答案:

答案 0 :(得分:4)

我们用于分类JUnit测试的解决方案是使用自定义注释。然后,您可以使用自定义TestRunner,可以为其提供标记或参数,以确定要运行的测试类型或所有测试类型。

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

答案 1 :(得分: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>

然后你创建了一些蚂蚁目标,一个用于快速测试,一个用于系统测试,一个用于完成所有这些。就像那样。 也就是说,如果您可以重命名测试类。

答案 2 :(得分:0)

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