JUnit in Action 2nd Edition 第一章 JUnit 概述(2)

1.5 设置JUnit环境

为了使用JUnit编写你的测试程序,你需要添加JUnit .jar文件到你的项目编译路径和执行路径,有如下这些步骤:

http://www.junit.org下载JUnit 发布版本(junit-4.6或者更新)。JUnit包含几个测试样例,可以去熟悉执行JUnit测试。

JUnit压缩包解压到你电脑的一个路径中(例如:c:\on Windows 或者 /opt/on UNIX)。

在这个路径中,解压文件将创建一些JUnit的子文件(例如:c:\junit4.6 或者/opt/junit4.6)。

现在使用JUnit可以运行测试程序了,JUnit完成java程序的测试然后可以使用视图查看测试结果,控制台输出包括一个基于文本的测试运行器。

在你的操作系统打开一个命令行如c:\junit4.6或者/opt/junit4.6,运行这个文本测试运行器。

 JUnit in Action 2nd Edition 第一章 JUnit 概述(2)_第1张图片

输入合适的命令:

Windows:

java -cp junit-4.6.jar;. junit.samples.ALLTests

UNIX:

java -cp junit-4.6.jar:. junit.samples.ALLTests

这个ALLTests类包含一个main主方法去执行测试样例:

public static void main(String[] args){

   junit.testui.TestRunner.run(suite());

}

1.1显示了测试的结果。

JUnit文本测试运行器使用许多点(....)显示测试通过。如果有错误产生,异常显示将代替点。

在本书的第三部分,我们将看到如何使用Ant构建工具和Maven构建工具。

 

1.6使用JUNit测试

JUnit有许多特性可以很容易地编写和执行测试,你将看到这些特性在本书的学习过程中:

n 将测试类实例和类加载相分离以避免单元测试间的相互影响

n JUnit annotations 提供资源初始化和回收方法:

     @Before,@BeforeClass,@After,@AfterClass

n 有不同类型的断言方法可以更容易地检查测试的结果

n 可以和流行的工具相集成,像AntMaven,流行的开发环境像EclipseNetBeansIntelliJ

    和JBuilder

事不宜迟,我们看列表1.4使用JUnit编写Calculator类测试。

LIsting 1.4 The JUnit CalculatorTest program

import static org.java.Assert.*;

import org.java.Test;

public class CalculatorTest{

    @Test

    public void testAdd(){

       Calculator calculator = new Calculator();

double result = calculator.add(10,50);

assertEquals(60,result,0); 

   }

}

这是一个相当简单的测试,我们来逐步浏览它:

1.我们开始创建一个测试类CalculatorTest,唯一的限制的是这个测试类的访问控制权限必须声明为public,我们可以任意地对它命名,但通常实际上都是以Test结尾。需要注意的是在JUnit3版本中,测试类都需要继承TestCase类,但是这个要求在JUnit4中被移除了。

2.我们通过添加@Test注释标记测试方法,使testAdd()成为一个单元测试方法,一个最好的实践命名方式是测试方法须遵循testXXXX模式,JUnit对方法名没有限制,你可以命名任何你想到的名字,只要方法前面有@Test注释,JUnit都将执行他们。

3.我们通过创建一个Calculator类的实例calculator来开始测试。

4.在之前,我们执行后通过调用类方法去测试,通过输入两个已知的值。

5.JUnit框架开始发挥作用了,检查这个测试的结果,我们调用一个assertEquals方法,在类开始的第一行我们使用静态导入,关于assertEquals方法的Javadoc文档如下:

/**

 *断言两个doubles类型或者floats是否相等在一个合适的误差值下

 *如果期望的值为无穷大则误差范围将忽略

 */

static public void assertEquals( double expected,double actual,double delta)

在列表1.4,我们通过assertEquals使用这些参数:

expected = 60

actual =result

delta = 0

因为我们输入计算1050两个值,我们告诉assertEquals希望和为60.(我们输入0作为误差值因为我们计算的是两个整数之和)。当我们调用calculator对象时,我们把结果插入局部double类型命名为result,因此,我们通过变量,assertEquals方法比较60的期望值。

假如实际的值不等于期望的值,JUnit抛出一个unchecked异常,将引起测试失败。

大多时候,delta参数值一般为0,我们一般忽略它,它一般涉及到那些不总是需要精确计算结果的地方,包括很多位浮点数的计算,delta提供了一个可变的因素。假如实际值在expected-deltaexpected+delta范围之中,那么测试将通过,可以能发现它很有用,尤其是在做四舍五入的数学计算,误差截断,或者当断言一个条件是关于一个文件的修改日期时,因为日期的准确性依赖于所用的操作系统。

我们假设列表1.11.4编码的路径是c:\junit-book\ch01-jumpastart,

(/opt/junitbook/ch01-jumpstart on UNIX)。我们进入这个目录打开一个命令行开始编译这

个代码(我们将假设在此路径可执行javac命令):

Windows

javac -cp \junit4.6\junit-4.6.jar *.java

 

UNIX:

javac -cp /opt/junit4.6/junit-4.9.jar *.java

 

1.2展示了测试的结果

 JUnit in Action 2nd Edition 第一章 JUnit 概述(2)_第2张图片

使用JUnit的标记特性可以看出,在列表1.4中使用JUnit编写测试代码比列表1.2中的测试程序更容易,另外,我们能也通过JUnit框架自动地运行测试。

当我们从命令行运行测试时(图1.2),我们看到了测试所花的时间和测试通过过的数量,这里有许多其它方式去运行测试,使用Eclipse 集成开发环境,构建工具Ant,这个简单的例子使你尝到了使用JUnit进行单元测试带来的好处。

 

1.7 总结

   每一个开发者都应该进行某些测试来看代码是否工作,开发者们使用自动化单元测试能够重复执行他们的测试,要求去确认新的代码工作同时不能破坏已经存在的测试。

  不使用JUnit创建一个简单的单元测试一点都不困难,但是随着测试的增加和变得越来越复杂,编写和维护测试代码变得越来越困难,JUnit是一个单元测试框架,可以使单元测试很容易去创建,运行,回归单元测试。

  在这一章中,我们通过一个简单的测试了解了JUnit一些表面的功能,JUnit的功能远不如此。

在第二章中,我们将更仔细地查看JUnit框架的各种类(不同的annotationassertion机制),他们如何在一起工作使单元测试变得有效和有效率,我们也将浏览JUnit3的旧功能和JUnit4新特性的一些不同。

 

未完待续.....

你可能感兴趣的:(Junit)