单元测试工具(连载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