我正在尝试建立一个编译代码,编译测试,运行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。此设置允许在调用构建时运行所有测试,但这不适合日常开发。
我希望能够做两件事:
我对(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:)
答案 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来整理它。