单元测试工具(连载1)
- 2019 年 12 月 12 日
- 笔记
1 JAVA单元测试框架JUnit 4
百度百科介绍:
“JUnit是一个Java语言的单元测试框架,由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit和xUnit家族中最成功的一个。JUnit有自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试工具。
JUnit是由Erich Gamma和Kent Beck编写的一个回归测试框架(Regression Testing Framework)。JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。JUnit是一套框架,继承TestCase类,就可以用JUnit进行自动测试了。”
而JUnit 4是JUnit框架有史以来的最大改进,其主要目标是利用Java 5的Annotation特性简化测试用例的编写。
1.1 JUnit 4环境的配置
注:
使用JUnit 4时不要使用转为Android提供开发的ADT配置的Eclipse,这个Eclipse在JUnit 4中存在一些问题。可以到Eclipse的官方网站(http://www.eclipse.org/)上下载J2SE版本。笔者目前使用的版本如图1所示。

图1 Eclipse
进行单元测试,首先需要有被测程序,这里以一个简易的计算器作为例子。
案例1:JAVA实现的简易的计算器测试。
这个计算器中主要包括加、减、乘、除、求平方以及开根号6个函数,其代码如下。
packagecom.jerry;
public class Calculator {
private static int result; // 静态变量,用于存储运行结果
public void add(int m,int n) {
result = m + n;
}
public void substract(int m,int n) {
result = n-m; //Bug: 正确的应该是result =m-n
}
public void multiply(int m,int n) {
} // 此方法尚未写好
public void divide(int m,int n) {
result = m / n;
}
public void square(int n) {
result = n * n;
}
public void squareRoot(int n) {
for (; ; //Bug : 死循环
}
public void clear() { // 将结果清零
result = 0;
}
public int getResult() {
return result;
}
}
注:
这里暂时先不写乘法函数的实现,并且故意写错减法函数的实现。
接下来建立JUnit 4测试程序。首先将JUnit 4单元测试包引入这个Project中,方法如下。
在被测程序的Class上单击鼠标右键,在弹出的菜单上选择【Properties】,然后在弹出的属性窗口中,首先在左边选择【Java Build Path】,然后到右上选择【Libraries】标签,之后在最右边点击【Add Library…】按钮,加入JUnit4,如图2所示。

图2 Java Build Patch
在Eclipse的被测程序上右键单击该弹出菜单,选择“New->JUnit Test Case”,在弹出的对话框中进行相应的选择,如图3所示。

图3 New JUnit Test Case
单击【Next】按钮后,系统自动列出这个类中包含的方法,选择要进行测试的方法。此例中,仅对“加、减、乘、除”4个方法进行测试。之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。只需对这些测试用例稍作修改,即可使用。
packagecom.jerry;
importstatic org.junit.Assert.*;
importorg.junit.Before;
importorg.junit.Test;
importorg.junit.Ignore;
publicclass CalculatorTest {
privatestatic Calculator calculator = new Calculator();
@Before
publicvoid setUp() throws Exception {
calculator.clear();
}
@Test
publicvoid testAdd() {
calculator.add(2,3);
assertEquals(5,calculator.getResult());
}
@Test
publicvoid testSubstract() {
calculator.substract(10,2);
assertEquals(8,calculator.getResult());
}
@Test
publicvoid testMultiply() {
fail("Not yetimplemented");
}
@Test
publicvoid testDivide() {
calculator.divide(8,2);
assertEquals(4,calculator.getResult());
}
}
注:
这里暂时先不写乘法函数的测试代码。
星云测试
http://www.teststars.cc
奇林软件
http://www.kylinpet.com
联合通测
http://www.quicktesting.net