十一、 工具集成功能
当我写本文时,JUnit 4在IDE方面的集成还不是很理想。事实上,如果你试图运行我们刚才看到的那个测试类的话,它们无法工作在任何IDE环境中,因为它们不能被识别为测试类。为了向前兼容性起见,JUnit 4发行中带有一个适配器(junit.framework.JUnit 4TestAdapter),你必须把它使用于一个suite()方法中。下面是你必须添加到每个类中的代码;这样以来,它们才能为各种IDE,Ant以及JUnit 3.8中的文本运行机所识别:
public static junit.framework.Test suite() {
return new JUnit 4TestAdapter(CalculatorTest.class);
}
(一) Intellij IDEA
IDEA 5并没有集成JUnit 4。没有办法,我们只好等待IDEA 6中实现这一集成了。在这个例子中,我使用了较早的发行版本(Demetra build 5321);但是,参数化测试用例仍不能工作。图1展示了这个CalculatorTest的执行情况(被忽略的测试以一个不同的图标标志)。
图1.IDEADemetra仅能运行CalculatorTest。
图2.Eclipse 3.2RC7能够运行测试集类AllCalculatorTests。
(二) Eclipse
我现在使用的是Eclipse的3.2 RC7版本。虽然它还不是一个稳定发行版本,但是其与JUnit 4的集成优于IDEA。上图2展示了在运行AllCalculatorTests类时你能看到的结果。
如你所见,该参数化测试用例(SquareTest)被描述为7个单独的测试。
(三) Ant集成
junit任务当前仅仅支持JUnit 3.8风格测试;这也是说,你还必须用一个JUnit 4 TestAdapter来包装你的JUnit 4测试;这样,它们才能在Ant中运行。这个<junit>任务与其在JUnit 3.8中用法一样:
<!-- Test -->
<target name="test" depends="compile">
<junit fork="yes" haltonfailure="yes">
<test name=" JUnit 4.AllCalculatorTests"/>
<formatter type="plain" usefile="false"/>
<classpath refid="classpath"/>
</junit>
</target>
十二、 结论
有很长一段时间,JUnit简直成了事实上的单元测试框架标准。但是,近来,这个框架似乎无大"动静":没有重要的发行版本,没有引人注目的新特征出现。这可能是为什么其它测试框架,例如Test-NG开始逐渐占居测试框架市场统治地位的原因。
随着这个新版本的发行,JUnit又出现了新的转机。如今,它提供了许多新的API,而且现在还使用注解,所以使开发测试用例更为容易。事实上,该JUnit开发者已经开始考虑新的未来的注解问题。例如,你可以在一个依赖于前提(举例来说,你需要在线地执行这个测试)的测试用例上添加一个@Prerequisite注解;或者添加一个能够指定重复次数及时限(举例来说,重复测试5次以确保真正出现了一个时限问题)的@Repeat注解;或者甚至在@Ignore注解上添加一个平台参数(举例来说,@Ignore(platform=macos),这将只有你在一个MacOS平台上运行时才忽略一个测试)。从本文中你能看到,JUnit的未来依然灿烂辉煌。