前言
上一篇文章《为什么要进行烦人的单元测试?》讨论了一下现阶段软件开发中,程序员们测试情况的现状。这篇文章中,我打算介绍一下单元测试的工具(插件),并且推荐大家以后在开发中,真正的用上单元测试,用好单元测试。
说明
这篇文章的主题,主要是介绍一下 JUnit 3,虽然 JUnit 3 已经不推荐使用了,但它也曾是风靡一时。这里旨在讨论一下 JUnit 3 的使用,以及它的内部构造,就当是为下一篇文章介绍 JUnit 4 做铺垫吧。之前已经把单元测试的重要性都讲出来了,这里就不再赘述了,直接进入正题。
介绍
JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。JUnit 测试是程序员测试,即所谓白盒测试。它是一个 Java 语言的测试框架,多数 Java 的开发环境都已经集成了 JUnit 作为单元测试的工具。
特性
- 用于测试期望结果的断言(Assertion)
- 用于共享共同测试数据的测试工具
- 用于方便的组织和运行测试的测试套件
- 图形和文本的测试运行器
使用
下载
- 下载 JUnit 3.8.1.jar 包(这里提供了下载地址)
加入项目
- 把压缩包中的 junit3.8.1.jar 文件,加入到项目的 classpath 中。
基本流程
- 写测试类并继承 TestCase 类
- 写测试方法 testXXX()
- 写测试套件类,将 test case 加入到 test suite
- 运行JUnit Test 进行测试
演示代码
<span style="font-family:Microsoft YaHei;">package com.tgb.test; import junit.framework.Assert; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; // 1. 继承 TestCase 类 public class CalculatorTest extends TestCase { // 2. 测试方法必须以 test 开头 public void testAdd() { int result = new Calculator().add(1, 2); Assert.assertEquals(3, result); } // 3. 将 testcase 加入 testsuite,可以同时测试多个用例 public static Test suite() { return new TestSuite(CalculatorTest.class); } }</span>
剖析概念
- TestCase(测试用例)
当一个类继承 JUnit 的 TestCase 类,即成为一个测试类,而且,测试类中的方法必须以 test 开头,比如:testAdd() 等。
- TestSuite(测试套件)
TestSuite 是一组测试,目的在于将相关的测试用例归入一组。当执行一个 Test Suite 时,就会执行组内所有的测试方法,这就避免了繁琐的测试步骤。当然,如果没有为 test case 写 test suite 的话,系统会默认为每个 test case 生成一个 test suite。
- Assert(断言)
Assert 用于检查条件是否成立,当条件成立则 Assert 方法通过,否则会抛出异常。例如,Assert.assertEquals(3, result); 判断 result 是否跟期望的3想等,如果想等则通过,否则测试失败。
主要有如下几个断言方法:
assertTrue/False():判断一个条件是 true 还是 false。
fail():失败,可以有消息,也可以没有消息。
assertEquals():判断是否想等,可以指定输出错误信息。注意不同数据类型所使用的 assertEquals 方法参数有所不同。
assertNotNull/Null():判断一个对象是否为空。
assertSame/NotSame():判断两个对象是否指向同一个对象。
failNotSame/failNotEquals():当不指向同一个内存地址或者不相等的时候,输出错误信息。错误信息为指定的格式。
- setUp
每次测试方法执行之前,都会执行 setUp 方法,此方法用于进行一些固定的准备工作,比如,实例化对象,打开网络连接等。
- tearDown
每次测试方法执行之后,都会执行 tearDown 方法,此方法用于进行一些固定的善后工作,比如,关闭网络连接等。
结束语
JUnit 3 就介绍到这,可以看出,JUnit 3 还是很简单的,只不过在每次编写测试类时,都需要继承 TestCase 类,这就无形之中给测试类增加了一些牵绊。下一篇文章中,我们一起来讨论一下 JUnit 4 的一些新特性,以及是如何简化测试用例的。
不要着急哦,下一篇马上就到。。。