实验三-单元测试1
一、实验目的
1、掌握单元测试的基本理论和作用。
2、掌握典型单元测试工具 JUnit 的使用
二、实验内容
实验任务 1
请按以下说明完成一个基本的 JUnit4 测试实例。
首先打开 Eclipse 编译器,创建一个 Java 项目,并在其中创建一个由 File 类构成的程序 File.java,给该类添加一个 abs 方法,作用是返回一个给定整数参数的绝对值。
public class File { public static void main(String[] args) { // TODO Auto-generated method stub }
然后用JUnit工具对abs方法进行测试。
import org.junit.Before; import org.junit.Test; public class File { private static int a; @Before public void init(){ a = -10; } @Test public void abs(){ int result; result = Math.abs(a); System.out.println(result); } }
测试结果
实验任务 2
根据下面的说明,建立一个基于 JUnit4 的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和 JUnit 测试的应用。
首先新建一个项目叫 JUnitTest,我们编写一个 Calculator 类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些 Bug 用于演示,这些 Bug 在注释中都有说明。该类代码如下:
public class Calculator{ private static int result; // 静态变量,用于存储运行结果 public void add(int n) { result = result + n; } public void substract(int n) { result = result - 1; //故意的Bug,应该是 result =result-n } public void multiply(int n) { } // 假设此方法在项目完成过程中尚未写好 public void divide(int n) { result = result / n; } public void square(int n) { result = n * n; } public void squareRoot(int n) { //求平方根 for (; ;) ; //Bug : 死循环 } public void clear() { // 将结果清零 result = 0; } public int getResult(){ return result; } }
将 JUnit4 单元测试包引入这个项目,生成 JUnit 测试框架,进行测试。
首先给程序添加一个test方法
@Test public void test(){//增加一个test方法 System.out.println(getResult()); }
测试add(),通过
add(10);
测试substract(),有bug,与预期输出不符,应为99
substract(-99);
测试multiply(),通过,multiple方法未写好,与预期输出结果相符
multiply(2);
测试divide(),通过
result = 10;
divide(5);
测试square(),通过
square(2);
测试squareRoot(),有bug,程序卡死
result = 10;
squareRoot(2);
实验任务 3
编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。
import org.junit.Before; import org.junit.Test; import java.util.Scanner; public class sy3 { public static int y; @Before public void init(){ y = 2100; } @Test public void ifR(){ if (y % 400 == 0) System.out.println(y + "是闰年"); else if (y % 100 == 0) System.out.println(y + "不是闰年"); else if (y % 4 == 0) System.out.println(y + "是闰年"); else System.out.println(y + "不是闰年"); } }
实验任务 4
编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测试。
import org.junit.Before; import org.junit.Test; import java.math.BigDecimal; public class sy4 { public static double a; public static double b; public static double c; @Before public void init(){ a = 10.01; b = 3.65; c = 7.66; } @Test public void checkTritangle(){//判断三角形类型 String result = null; //BigDecimal不会丢失double的精度 BigDecimal a1 = new BigDecimal(a); BigDecimal b1 = new BigDecimal(b); BigDecimal c1 = new BigDecimal(c); if(a1!=null&&b1!=null&&c1!=null){ if(a+b>c&&a+c>b&&b+c>a){ //乘积 BigDecimal a2 = a1.multiply(a1); BigDecimal b2 = b1.multiply(b1); BigDecimal c2 = c1.multiply(c1); //先判断直角 //判断BigDecimal不能用==或者equals,得用compareTo if((a2.add(b2)).compareTo(c2) == 0 || (a2.add(c2)).compareTo(b2) == 0 || (b2.add(c2)).compareTo(a2) == 0){ if(a1 == b1 || a1 == c1 || b1 == c1){ result = "等腰直角"; } else { result = "直角"; } } else if (a1 == b1 && b1 == c1){ result = "等边"; } else if (a1 == b1 || b1 == c1 || b1 == c1){ result = "等腰"; } else { result = "普通"; } } else { result = "无法构成三角形"; } }else{ result = "请检查参数值是否为空或参数值是否正确"; } System.out.println(result + "三角形"); } }
三、实验总结
通过本次软件测试实验,我学习了如何使用junit工具进行单元测试,了解了@Before、@After、@Test等注解的作用和使用方法,对单元测试有了更深的了解和掌握。