首页 > 代码库 > 谈谈单元测试之(二):测试工具 JUnit 3

谈谈单元测试之(二):测试工具 JUnit 3


前言


上一篇文章《为什么要进行烦人的单元测试?》讨论了一下现阶段软件开发中,程序员们测试情况的现状。这篇文章中,我打算介绍一下单元测试的工具(插件),并且推荐大家以后在开发中,真正的用上单元测试,用好单元测试。


说明


这篇文章的主题,主要是介绍一下 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 的一些新特性,以及是如何简化测试用例的。

不要着急哦,下一篇马上就到。。。

谈谈单元测试之(二):测试工具 JUnit 3