在JUnit4推出前,由于三年未做更新,地位受到了其他Java单元测试工具的挑战。相对JUnit3而言,JUnit4是一个全新的Java单元测试框架,最大的特点是利用JDK1.5的注解特性简化测试用例的编写(所以要使用JUnit4,要求JDK必须是JDK1.5或以上版本)。

      首先从最简单的一个案例开始,学习如何使用JUnit3和JUnit4进行单元测试。被测对象“加”类的代码如下:

      接下来使用JUnit3对“加”类进行单元测试,测试前需要导入JUnit3软件包。具体代码如下(其中对部分代码进行了注释,方便大家阅读):

      从上面的代码可以看出,使用JUnit3进行单元测试,单元测试类TestAddOperation必须继承自 TestCase,执行测试的方法必须以test开头,并且使用各种类型的断言判断实际结果和预期结果的差异。

      该单元测试类测试了被测类AddOperation中的add()方法。编译、运行程序(运行程序的命令为java -ea junit.textui.TestRunner TestAddOperation,含义为用JUnit3文本运行机的方式执行单元测试类TestAddOperation。),因为通过断言判断的add()方法的实际运行结果3+5=8和预期结果8一致,所以单元测试运行结果如图9. 1所示。



      假设针对该“加”类有这样的测试用例,输入数据仍然为3和5,预期结果为15,再次编译、运行程序,单元测试运行结果如图9.2所示。

    9.1 JUnit初探 - 图2


    图9.2 JUnit3测试“加”类显示结果二

      从运行结果可以看出,JUnit3单元测试框架发现,针对AddOperation类的add()方法进行单元测试,实际运行结果3+5=8和预期结果15不一致,所以提示出现了一个失败,并且明确指出了失败的原因。

    9.1.2 “加”类JUnit4测试

      同样对“加”类进行单元测试,不过这次是使用 JUnit4 进行单元测试,测试前需要先导入JUnit4软件包,具体代码如下:

      注意,使用JUnit4对AddOperation类中的add()方法进行单元测试,导入的是org.junit包里的内容,已经不再是junit.framework包,并且单元测试类TestAddOperation不需要再继承自TestCase类。

      使用了静态导入import static org.junit.Assert.*;,把org.junit.Assert包里的静态变量和方法导入到这个类中,调用Assert包里的assertEquals(expResult, result)方法和调用自己的方法没有区别。

      编译、运行程序(运行程序的命令为java -ea org.junit.runner.JUnitCore TestAddOperation,含义为用JUnit4运行机执行单元测试类TestAddOperation,这个JUnit4运行机可以运行JUnit3的单元测试类,但JUnit3的文本运行机不可以执行JUnit4的单元测试类),运行结果如图9.3所示。


    图9.3 JUnit4测试“加”类显示结果一

      同样的,把预期结果从8改成15,再次编译、运行,其运行结果如图9.4所示。从运行结果来看,和JUnit3相比,还是有一些不同的。

    9.1 JUnit初探 - 图4


    图9.4 JUnit4测试“加”类显示结果二