软件测试系列之四 单元测试(Junit)

单元测试简介java

单元测试就是测试程序员依据其所设想的方式开发出来的程序是否产生了预期的结果。单元测试是与软件开发生命周期中的编码阶段结合起来的,而且只有项目具有各个窗体、报表和屏幕以后才能开始进行测试。程序员

编码阶段的基本单元式:程序、函数、过程、窗体、或者图形用户界面。在单元测试中,须要测试如下内容:代码的控制流程、给函数传递参数值、从函数获取值是否正确。另外,单元测试不仅限于检查控制流程或者程序的执行,还检查代码是否遵循编码标准。数据库

在对每一个模块进行单元测试时,不能彻底忽视它们和周围模块的相互关系。为模拟这一联系,在进行测试时,需设置若干辅助测试模块。辅助模块有两种,一种是驱动模块,用以模拟被测试模块的上级模块。驱动模块在单元测试中接收测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。另外一种是桩模块,用以模拟被测试模块工做过程当中所调用的模块。桩模块由被测模块调用,它们通常只进行不多的数据处理,例如打印入口和返回,以便于检查被测试模块与其下级模块的接口。编程

测试中一般使用测试驱动模块和桩模块。测试驱动程序是帮助执行软件以检查其是否工做的软件。此程序提供一个框架来设置参数、执行单元并记录结果。桩模块不是实际单元而是模型,用以取代实际单元并帮助执行测试过程。框架

开发人员将测试做为编程的必要过程,并采用单元测试来验证它们的代码是否执行预期的功能。开放源码的单元测试框架有JUnit和Nunit。JUnit适用于Java应用程序,它是由SmallTalk的Sunit派生而来。Nunit用于测试.NET程序。PHPUnit是一个轻量级的PHP测试框架。JavaScript有JsUnit,数据库有DBUnit……ide

4.2  JUnit函数

4.2.1  JUnit简介工具

JUnit是由ErichGamma和KentBeck编写的一个回归测试框架。JUnit测试是程序员测试,即所谓白盒测试,由于程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。JUnit是一套框架,继承TestCase类,就能够用JUnit进行自动测试了。单元测试

JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。它是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括如下特性:  测试

 用于测试指望结果的断言(Assertion)。

 用于共享共同测试数据的测试工具。

 用于方便的组织和运行测试的测试套件。

 图形和文本的测试运行器。

另外JUnit是在xp编程(Extreme Programming)和重构(refactor)中被极力推荐使用的工具,由于在实现自动单元测试的状况下能够大大的提升开发的效率,可是实际上编写测试代码也是须要耗费不少的时间和精力的,那么使用这JUnit好处到底在哪里呢?有如下几点供参考:

A、对于xp编程而言

要求在编写代码以前先写测试,这样能够强制你在写代码以前好好的思考代码(方法)的功能和逻辑,不然编写的代码很不稳定,那么你须要同时维护测试代码和实际代码,这个工做量就会大大增长。所以在xp编程中,基本过程是这样的:构思→编写测试代码→编写代码→测试,并且编写测试和编写代码都是增量式的,写一点测一点,在编写之后的代码中若是发现问题能够较快的追踪到问题的缘由,减少回归错误的纠错难度。

B、对于重构而言

其好处和xp编程中是相似的,由于重构也是要求改一点测一点,减小回归错误形成的时间消耗。

C、对于非以上两种状况

咱们在开发的时候使用JUnit写一些适当的测试也是有必要的,由于通常咱们也是须要编写测试的代码的,可能原来不是使用的JUnit,若是使用JUnit,并且针对接口(方法)编写测试代码会减小之后的维护工做,例如之后对方法内部的修改(这个就是至关于重构的工做了)。另外就是由于JUnit有断言功能,若是测试结果不经过会告诉咱们哪一个测试不经过,是什么缘由。而不是写一些测试代码看其输出结果,而后再由本身来判断结果使用正确,使用JUnit的好处就是这个结果是否正确的判断是它来完成的,咱们只须要看看它告诉咱们结果是否正确就能够了,在通常状况下会大大提升效率。

在测试代码时,必须遵照特定的命名惯例,待测的每种方法的命名应该testXXXX()的格式。任何编写的测试代码应执行并完成如下任务:

 设置测试所须要的全部条件。

 调用待测的方法。

 验证待测的方法是否执行预期的功能。

 清除。

测试代码的编写方式与程序代码相同。除了在测试代码中会用到附加库之外,其余的与程序代码相同。在执行的时候,执行测试代码而不是实际的项目代码。测试代码在必定程度上控制条件下检查项目代码。

JUnit提供一些测试方法,用于判断正在测试的特定方法是否正确执行那个功能。这些方法被称为asserts(),它断言某个特定条件是否为真。断言是单元测试中的基本结构。如表4-1所示,JUnit提供了多个assert()方法,这些方法包含在junit.framework.TestCase类中。

表4-1  JUnit中的断言

方法

功能描述

assertEquals

判断给定两对象的值是否相等

assertNull

断言给定对象是否为null

assertNotNull

断言给定对象是否不为null

assertSame

判断给定两对象是否指同一对象

assertNotSame

判断给定两对象是否不是指同一对象

assertTrue

断言给定的布尔条件是否为真

assertFalse

断言给定的布尔条件是否为假

fail

测试失败

断言失败时,将终止测试方法,并引起AssertionFailedError。

4.2.2  添加JUnit支持

不管是Eclipse仍是MyEclipse都自带有JUnit,咱们只需添加JUnit支持便可,想了解更多关于JUnit请参考官方网站 www.junit.org 。下面咱们介绍如何在MyEclipse中添加JUnit支持。

一、在Package Explorer中选中要添加JUnit支持的项目,点击右键"Build Path",而后点Add Librarys

 

2.选择JUnit,而后点击Next按钮。

3.

选择JUnit版本(推荐JUnit 4),但后点击Finish,此时项目就引入了JUnit.jar,也能够采用直接复制junit.jar到lib下的方式。

 

4.2.3  第一个JUnit程序

如今有一个类JunitDemo.java文件,须要对addNum、subNum方法作测试。

package com.test.java;
/**
 * 
 * @author 张晨光
 * 待测试的java类,须要测试其中的两个方法,addNum,subNum
 */
public class JunitDemo {
	public int addNum(int num1,int num2){
		return num1+num2;
	}
	public int subNum(int num1,int num2){
		return num1-num2;
	}
}

 

实现步骤以下:

 

   1.新建一个类JunitDemoTest.java。

   2.导入junit.framework.TestCase包。

   3.新建JunitDemo对象引用。

    4.新建测试addNum、subNum的方法,命名为testAddNum、testSubNum

  5.利用assertEquals进行断言。

代码以下:

 

package com.test;
import junit.framework.TestCase;
/**
 * 
 * @author 张晨光
 * 对JunitDemo类的addNum和subNum方法进行测试
 */
public class TestJunitDemo extends TestCase{
	public void testAddNum(){
		assertEquals(2,2,4);
	}
	public void testSubNum(){
		assertEquals(3,2,1);
	}
}

1.在项目右键以JUnit Test方式运行

 

2.运行结果以下图

Errors和Failures都是0,证实程序是没有问题的。

相关文章
相关标签/搜索