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,运行这个文本测试运行器。

 

输入合适的命令:

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

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

 

1.7 总结

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

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

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

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

 

未完待续.....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 Junit 测试三角形的小程序: ```java import static org.junit.Assert.assertEquals; import org.junit.Test; public class TriangleTest { @Test public void testTriangle() { Triangle triangle = new Triangle(3, 4, 5); assertEquals("This is a right-angled triangle.", triangle.getType()); Triangle triangle2 = new Triangle(3, 3, 3); assertEquals("This is an equilateral triangle.", triangle2.getType()); Triangle triangle3 = new Triangle(3, 3, 4); assertEquals("This is an isosceles triangle.", triangle3.getType()); Triangle triangle4 = new Triangle(3, 4, 6); assertEquals("This is not a triangle.", triangle4.getType()); } } class Triangle { private int a, b, c; public Triangle(int a, int b, int c) { this.a = a; this.b = b; this.c = c; } public String getType() { if (a + b <= c || a + c <= b || b + c <= a) { return "This is not a triangle."; } else if (a == b && b == c) { return "This is an equilateral triangle."; } else if (a == b || b == c || a == c) { return "This is an isosceles triangle."; } else if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) { return "This is a right-angled triangle."; } else { return "This is a scalene triangle."; } } } ``` 这个程序包含一个 `Triangle` 类和一个 `TriangleTest` 类。`Triangle` 类用于检查三角形的类型,`TriangleTest` 类包含了 Junit 测试用例。 在 `TriangleTest` 类中,我们创建了四个不同的三角形并分别检查它们的类型是否正确。我们使用 `assertEquals` 方法来比较实际输出和期望输出是否相等。 在 `Triangle` 类中,我们定义了一个 `getType` 方法来检查三角形的类型。如果三边不能构成一个三角形,我们返回字符串 "This is not a triangle.",否则我们使用一系列的 if 语句来判断三角形的类型并返回相应的字符串。 这个程序可以帮助你了解如何使用 Junit测试你的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值