使用ANT为回归和粒度运行多个JUnit测试

时间:2011-11-21 13:30:06

标签: unit-testing ant build junit regression

我正在尝试建立一个编译代码,编译测试,运行unittests然后构建的ANT构建脚本。这些都是通过具有依赖性的单独目标完成的,即

<target name="compile">
  <javac>...
</target>
<target name="compile-tests" depends="compile">
  <javac>...
</target>
<target name="unittest" depends="compile-tests">
  <junit...
   <test ...
  <fail if="tests.failed" ..
</target>
<target name="build" depends="compile, unittest">
</target>

'junit'任务中的每个'test'都集中在应用程序的一部分(通常是逐包),并指向Junit TestSuite。此设置允许在调用构建时运行所有测试,但这不适合日常开发。

我希望能够做两件事:

  1. 在构建中运行所有测试(如上面显示的设置)
  2. 从ant
  3. 单独运行测试

    我对(2)的解决方案是使用多个antcall任务,这不是最佳实践。在这些调用期间,设置了不同的属性来运行所有测试,因为它们都需要不同的属性:

    <!-- test package p2 with ant unittest -Dtest.p2=true -->
    <target name="unittest" depends="compile-tests">
      <junit...
       <test if="test.p1" ...
       <test if="test.p2"
      <fail if="tests.failed" ..
    </target>
    
    <target name="unittestall">
      <property name="test.p1" value="true"/>
       ...
    </target>
    
    <target name="build" depends="compile, unittest">
      <antcall target="unittestall" />
      <antcall target="clean" />
      <antcall target="compile" />
    </target>
    

    这给出了我所需的粒度,但意味着很多工作都是重复的,并且ant的依赖功能没有被充分利用。

    所以我的问题是: 如何才能最好地设置ANT和Junit,以便所有测试都可以作为构建的一部分运行,以便可以运行各个测试?

    谢谢你:)

    来自约书亚英格兰

    P.S。 ANT 1.8和Junit 4.10:)

1 个答案:

答案 0 :(得分:1)

这样的东西?

<target name="unittest-p1"></target>
<target name="unittest-p2"></target>
<target name="unittest-p3"></target>

<target name="unittest" depends="unittest-p1, unittest-p2, unittest-p3/>

然后,您可以通过传递unittest目标来运行所有测试:

ant unittest

(或任何依赖于单位测试的目标)

您可以通过调用适当的目标来运行任何单独的测试集,例如:

ant unittest-p1

如果你最终会在多个junit目标中出现大量重复,你可以通过将所有常见内容放入macrodef来整理它。