实验三 单元测试
实验三 单元测试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方法进行测试。
代码:
package uuu;
import org.junit.Before;
import org.junit.Test;
public class File {
private static int a;
@Before
public void init(){
a = -1000;
}
@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 测试框架,进行测试。
代码:
package uuu;
import org.junit.Before;
import org.junit.Test;
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;
}
@Test
public void test(){//增加一个test方法
square(100);
System.out.println(getResult());
}
}
实验截图:
实验任务3:
编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。
代码:
package uuu;
import org.junit.Before;
import org.junit.Test;
import java.util.Scanner;
public class Isrun {
public static int y;
@Before
public void init(){
y = 2022;
}
@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进行测试。
代码:
package uuu;
import org.junit.Before;
import org.junit.Test;
import java.math.BigDecimal;
public class San {
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 + "三角形");
}
}
实验截图: