3.5单元测试
实验任务 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 + "三角形");
}
}


















浙公网安备 33010602011771号