2011-06-01 59 views
5

我与一个具有传统的项目工作:Ant可以根据继承层次对JUnit测试进行分类吗?

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

我在寻找最简单的方式分别运行这两种类型的测试与蚂蚁。

我不知道是否有办法有蚂蚁基础上,继承层次自动识别这两类:

StringUtilsTest extends TestCase // "pure unit test" 

VS

ProductionDBTest extends AbstractTransactionalTesterBase // "integration test" 

有抽象超类的层次结构集成测试是基于但是它们都归结为一些春季测试课程,并最终延伸至junit.framework.TestCase

换句话说,我可以区分,在蚂蚁,测试(间接)延伸AbstractSpringContextTests和测试,直接延伸TestCase?或者我必须手动进行测试,例如把它们放在单独的Categories或TestSuites中? (有许多测试,所以我不想这样做。)


分辨率:我想肖恩(非常有前途)approach,但不能让它工作(容易)。所以我最终以半手工的方式进行了测试,使用this SO question中描述的设置注释纯粹的(这是较小的组),并使用Ant like this运行它们。 (请注意,编写自定义TestRunner需要的是而不是)。

回答

4

我们用于对JUnit测试进行分类的解决方案是使用自定义注释。然后,您可以使用一个自定义的TestRunner,该TestRunner可以给出一个标志或参数,以指示要运行哪些测试类型或全部测试类型。

对不起,没有示例代码,但创建注释和TestRunner是非常基本的,试试吧!

+1

我最终去注释,所以我可能会接受这个,但是...我有一个问题与您的自定义TestRunners的倡议。 :)从来没有写过,基于谷歌搜索一段时间,它似乎并不那么简单。幸运的是,自定义TestRunner是**不是**必需的,因为您可以使用[this]这样的设置(http://stackoverflow.com/questions/2176570/how-to-run-all-tests-belonging-to-a - 某些类功能于基于JUnit 4)! – Jonik 2011-07-11 22:32:41

0

我没有用过这个自己,介意。但是我知道你表示单元测试是作为一个资源集合来运行的,那些可以用restrictions来定义。而且,一个可能的限制是“instanceof”,它允许您根据超类选择类。这可以让你选择集成测试,然后使用资源收集“差异”功能,你可以选择其他的东西。不是太糟糕,如果不是微不足道的。我认为这在Ant 1.8+中有效。

+0

谢谢,看起来很有趣!我有问题让'instanceof'工作,虽然...不太清楚你应该如何在项目文件中引入antlib“org.apache.tools.ant.types.resources.selectors” - 通过将属性xmlns :项目元素中的rsel =“antlib:org.apache.tools.ant.types.resources.selectors”还是什么?哦,我明天继续。 使用Ant 1.8.1以便不应该成为问题。 – Jonik 2011-06-01 15:08:49

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测试和一个做他们所有......类似的东西。 也就是说,如果你可以重命名你的测试类。

+0

+1我的回答是谈论使用注释区分测试类型。这很好,因为它不会阻止人们重新命名测试,因为害怕混乱构建。话虽如此,命名约定可以有效地使用,如果是的话,这个解决方案更容易理解和实现。 – 2011-06-08 14:25:10

+0

不是我最终使用这个时间,而是+1,因为这是一种经过验证的真实(尽管是老派)分离测试类别的方法,它与大多数工具(IDE,Ant等)无关。 – Jonik 2011-07-11 22:37:56