第六章 JUnit
1. 简述 JUnit 单元测试步骤。
(1)判断组件的功能:通过定义应用的整体需求,然后将系统划分成几个对象;
(2)设计组件行为:依据所处理的过程,可以通过一个正规或者非正规的过程实现组件行为的设计,可以使用UML或者其他文档视图来设计组件行为,从而为组件的测试打下基础;
(3)编写单元测试程序(或测试用例)确认组件行为:这个阶段应假定组件的编码已经结束而组件工作正常,需要编写单元测试程序来确定其功能是否和预定义的功能相同,测试程序需要考虑所有正常和意外的输入,以及特定的方法能产生的溢出;
(4)编写组件并执行测试:首先创建类及其所对应的方法标识,然后遍历每个测试实例,为其编写相应代码使其顺利通过,然后返回测试。继续这个过程直至所有实例通过;
(5)测试替代品:对组件行为的其他方式进行考虑,设计更周全的输入或者其他错误条件,编写测试用例来捕获这些条件,然后修改代码使得测试通过;
(6)重整代码:如果有必要,在编码结束时对代码进行重整和优化,改动后返回单元测试并确认测试通过;
(7)当组件有新的行为时,编写新的测试用例:每次在组件中发现故障,编写一个测试实例重复这个故障,然后修改组件以保证测试实例通过。同样,当发现新的需求或已有的需求改变时,编写或修改测试实例以响应此改变,然后修改代码;
(8)代码修改,重复测试:每次代码修改时,重复所有的测试以确保没有打乱代码。
2. 对下列代码进行单元测试。
Triangle.java
public class Triangle
{
//定义三角形的三边
protected long lborderA = 0;
protected long lborderB = 0;
protected long lborderC = 0;
//构造函数
public Triangle(long lborderA,long lborderB,long lborderC)
{
this.lborderA = lborderA;
this.lborderB = lborderB;
this.lborderC = lborderC;
}
/*
* 判断是否是三角形
*/
public boolean isTriangle(Triangle triangle)
{
boolean isTrue = false;
//判断边界是否大于 0 小于 200,出界返回 false
if((triangle.lborderA>0&&triangle.lborderA<200)
&&(triangle.lborderB>0&&triangle.lborderB<200)
&&(triangle.lborderC>0&&triangle.lborderC<200))
{
//判断两边之和是否大于第三边
if((triangle.lborderA<(triangle.lborderB+triangle.lborderC))
&&(triangle.lborderB<(triangle.lborderA+triangle.lborderC))
&&(triangle.lborderC<(triangle.lborderA+triangle.lborderB)))
isTrue = true;
}
return isTrue;
}
/*
* 判断三角形类型
*/
public String isType(Triangle triangle)
{
String strType = "";
// 判断是否是三角形
if(this.isTriangle(triangle))
{
//判断是否是等边三角形
if(triangle.lborderA==triangle.lborderB
&&triangle.lborderB==triangle.lborderC)
strType = "等边三角形";
//判断是否是不等边三角形
else if((triangle.lborderA!=triangle.lborderB)&&
(triangle.lborderB!=triangle.lborderC)&&
(triangle.lborderA!=triangle.lborderC))
strType = "不等边三角形";
else
strType="等腰三角形";
}
return strType;
}
}
package triangle;
import org.junit.Assert;
import org.junit.Test;
public class TriangleTest {
Triangle t=new Triangle(0, 0, 0);
@Test
public void testisTriangle() {
Assert.assertTrue(t.isTriangle(new Triangle(100, 100, 100)));
Assert.assertFalse(t.isTriangle(new Triangle(100, 100, 200)));
Assert.assertFalse(t.isTriangle(new Triangle(100, 50, 50)));
Assert.assertFalse(t.isTriangle(new Triangle(200, 101, 100)));
}
@Test
public void testisType() {
Assert.assertEquals("等边三角形",t.isType(new Triangle(100, 100, 100)));
Assert.assertEquals("不等边三角形",t.isType(new Triangle(3, 4, 5)));
Assert.assertEquals("等腰三角形",t.isType(new Triangle(100, 100, 110)));
Assert.assertEquals("",t.isType(new Triangle(200, 100, 100)));
}
}