TestSuite
一旦你创建了一些测试实例,下一步是要让他们能一起运行。我们必须定义一个TestSuite。在JUnit中,这要求你在TestCase类中定义一个静态的suite()方法。suite()方法像main()方法一样,JUnit用它来执行测试。在suite()方法中,你将测试实例加到一个TestSuite对象中,并返回这个TestSuite对象。一个TestSuite对象可以运行一组测试。TestSuite和TestCase都实现了Test接口(interface),而Test接口定义了运行测试所需的方法。这允许你用TestCase和TestSuite的组合创建一个TestSuite。这是为什么我们前面说TestCase,TestSuite以及TestSuite组成了一个composite Pattern的原因。例子如下:
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTest(new testCar("testGetWheels"));
suite.addTest(new testCar("testGetSeats"));
return suite;
}
从JUnit 2.0开始,有一种更简单的动态定义测试实例的方法。你只需将类传递给TestSuite,JUnit会根据测试方法名自动创建相应的测试实例。所以你的测试方法好取名为testXXX()。例子如下:
public static Test suite() {
return new TestSuite(testCar.class);
}
从JUnit的设计我们可看出,JUnit不仅可用于单元测试,也可用于集成测试。关于如何用JUnit进行集成测试请参考相关资料。
为了兼容性的考虑,下面列出使用静态方法的例子:
public static Test suite() {
TestSuite suite= new TestSuite();
suite.addTest(
new testCar("getWheels") {
protected void runTest() { testGetWheels(); }
}
);
suite.addTest(
new testCar("getSeats") {
protected void runTest() { testGetSeats(); }
}
);
return suite;
}
TestRunner
有了TestSuite我们可以运行这些测试了,JUnit提供了三种界面来运行测试
[Text UI] junit.textui.TestRunner
[AWT UI] junit.awtui.TestRunner
[Swing UI] junit.swingui.TestRunner
我们前面已经看过文本界面了,下面让我们来看一看图形界面:
界面很简单,键入类名-testCar。或在启动UI的时候键入类名:
[Windows] d:>java junit.swingui.TestRunner testCar
[Unix] % java junit.swingui.TestRunner testCar
从图形UI可以更好的运行测试可查单测试结果。还有一个问题需要注意:如果JUnit报告了测试没有成功,JUnit会区分失败(failures)和错误(errors)。失败是一个期望的被assert方法检查到的结果。而错误则是意外的问题引起的,如ArrayIndexOutOfBoundsException。
由于TestRunner十分简单,界面也比较直观,故不多介绍。朋友们可自行参考相关资料。