软件单元测试
E、每一个测试方法所发生的与预期不一致状况的描述,称其测试失败元素(TestFailure)
F、JUnit Framework中的出错异常(AssertionFailedError)。
JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象;当调用TestSuite对象的run()方法是,会遍历自己容纳的对象,逐个调用它们的run()方法。(可参考《程序员》2003-6期)。
通常的做法是定义一个TestCase的子类,并且使用这个子类来满足所有的测试。新定义的共享的断言或者公共代码放到这个子类中。
(2)Junit最佳实践:
|-一次只有一个测试对象:(当无法预计这些对象发生改变时不会造成相互影响)
|-选择有一个的测试方法名:testXxx命名模式(Xxx为待测方法)。若在同一个方法增添其他测试testXxxYyy的命名模式
package .njupt;
import junit.framework.TestCase;
public class TriTest extends TestCase {
private Triangle tri1;
private Triangle tri2;
private Triangle tri3;
测试a和b是否没有都引用同一个对象。
|- assertSame(a, b)
Asserts that two objects refer to the same object.
测试a和b是否都引用同一个对象。
|- fail(message)
当程序错误时候,输出错误消息
|-自定义断言
通常而言,JUnit所提供的标准断言对大多数测试已经足够了。然而,在某些环境下,我们可能更需要自定义一些断言来满足我们的需要。
实验报告
(2009/2010学年第二学期)
课程名称
软件工程(双语)
实验名称
软件单元测试
实验时间
2011
年
05
月
23
日
指导单位
计算机学院软件工程系
指导教师
宗平
学生姓名
欧阳乐
班级学号
B09050326
学院(系)
计算机软件学院
专业
NIIT
实验报告
实验名称
软件单元测试
指导教师
宗平
实验类型
验证
实验学时
2
实验时间
public TriTest(String arg0) {
super(arg0);
}
protected void setUp() throws Exception {
super.setUp();
tri1=new Triangle(3,4,5);
tri2=new Triangle(4,4,4);
tri3=new Triangle(6,5,5);
}
protected void tearDown() throws Exception {
super.tearDown();
tri1=null;
tri2=null;
tri3=null;
}
public void testIsTriangle() {
assertTrue(Triangle.isTriangle(tri1));
protected long lborderC = 0;
//构造函数
public Triangle(long lborderA, long lborderB, long lborderC) {
this.lborderA = lborderA;
this.lborderB = lborderB;
this.lborderC = lborderC;
if ((triangle.lborderA > 0 && triangle.lborderA <= Long.MAX_VALUE / 2)
&& (triangle.lborderB > 0 && triangle.lborderB <= Long.MAX_VALUE / 2)
&& (triangle.lborderC > 0 && triangle.lborderC <= Long.MAX_VALUE / 2)){
2011.05.23
一、实验目的和要求
内容:要求学生能够完成单元测试的设计和运行。
要求:能正确进行黑盒测试和白盒测试的测试用例设计。
二、实验环境(实验设备)
硬件:微机
软件:XP操作系统,MyEclipse(Java)编程软件
三、实验原理及内容
参考《实验三:Software Unit Testing实验指导书》,了解Java单元测试,学会使用Junit编写自己的测试用例,并对被测试类进行测试。
测试a是否非空,a是一个对象或者null。
|- assertNull(a)
Asserts that an object is null.
测试a是否为null,a是一个对象或者null。
|- assertNotSame(a, b)
Asserts that two objects do not refer to the same object.
assertFalse(!Triangle.isTriangle(tri3));
}
public void testGetType() {
assertNotNull(Triangle.getType(tri1));
assertNotNull(Triangle.getType(tri2));
assertNotNull(Triangle.getType(tri3));
(1)JUnit的好处和JUnit单元测试编写原则
好处:
A、可以使测试代码与产品代码分开。
B、针对某一个类的测试代码通过较少的改动便可以应用于另一个类的测试。
C、易于集成到测试人员的构建过程中,JUnit和Ant的结合可以实施增量开发。
D、JUnit是公开源代码的,可以进行二次开发。
E、可以方便地对JUnit进行扩展。
结果如下:
(2)为Triangle类编写测试用例:
将一些要点的截图以及代码提供如下。
点击完成,创建Triangle类。代码如下:
package .njupt;
public class Triangle {
//定义三角形的三边
protected long lborderA = 0;
protected long lborderB = 0;
编写原则:
A、是简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写。
B、是使测试单元保持持久性。
C、是可以利用既有的测试来编写相关的测试。
(2)JUnit的特征
A、使用断言方法判断期望值和实际值差异,返回Boolean值。
B、测试驱动设备使用共同的初始化变量或者实例。
C、测试包结构于组织和集成运行。
|- assertEquals(a, b)
Asserts that two primitive values are equal.
测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
|- assertFalse(a)
Asserts that a condition (a) is false.
测试a是否为false(假),a是一个Boolean数值。
|- assertTrue(a)
Asserts that a condition is true.
测试a是否为true(真),a是一个Boolean数值
|- assertNotNull(a)
Asserts that an object isn't null.
|- Assert调用总解释失败原因。第一个参数务必为描述文本
2、MyEclipse环境下的单元测试实验
(1)依据示例的过程截图如下,代码略。
首先要创建(或选择)自己的工作空间:
然后新建工程,按截图所示的步骤,其他以默认值设定即可:
接下来创建并编写UnitTest类:
点击右键,新建类:
点击完成后,打开类,写入代码,然后再建测试用例:
选择其中任一方法作为测试对象,这里选取的是equals()方法。
D、支持图型交互模式和文本交互模式。
(3)JUnit框架组成
A、对测试目标进行测试的方法与过程集合,可称为测试用例(TestCase)。
B、测试用例的集合,可容纳多个测试用例(TestCase),将其称作测试包(TestSuite)。
C、测试结果的描述与记录。(TestResult)。
D、测试过程中的事件监听者(TestListener)。
//判断两边之和大于第三边
if ((triangle.lborderA < (triangle.lborderB + triangle.lborderC))
&& (triangle.lborderB < (triangle.lborderA + triangle.lborderC))
&& (triangle.lborderC < (triangle.lborderA + triangle.lborderB))){
单元测试——是最小粒度的测试,以测试某个功能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细节。
JUnit ——是一个开发源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。主要用于白盒测试,回归测试。