实验项目名称:实验三
一、 实验目的
1、掌握单元测试的基本理论和作用。
2、掌握典型单元测试工具 JUnit 的使用。
二、 实验内容
实验任务 1 :
按说明完成一个基本的 JUnit4 测试实例。
实验任务 2 :
根据说明,建立一个基于 JUnit4 的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和 JUnit 测试的应用。
实验任务3:
编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。
实验任务4:
编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测 试。
三、 设计思路及结果
实验任务 1 :
请按以下说明完成一个基本的 JUnit4 测试实例。
首先打开 Eclipse 编译器,创建一个 Java 项目,并在其中创建一个由 File 类构成的程序 File.java,给该类添加一个 abs 方法,作用是返回一个给定整数参数的绝对值。
package junit_test;
public class File {
public int abs(int a) {
if(a>0) {
return a;
}else {
return -a;
}
}
}
然后用JUnit工具对abs方法进行测试。
实验任务 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 junit_test;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import junit.framework.TestCase;
@RunWith(Parameterized.class)
public class CalculatorTest {
private static Calculator calculator = new Calculator();
private int param;
private int result;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testClear() {
result = 0;
calculator.clear();
assertEquals(result, calculator.getResult());
}
@Test
public void testAdd() {
result = 3;
calculator.add(3);
assertEquals(result, calculator.getResult());
}
//故意的Bug,应该是 result =result-n
@Test
public void testSubstract() {
result = 1;
calculator.substract(2);
assertEquals(result, calculator.getResult());
}
@Ignore("此方法未实现")
public void testMultiply() {
calculator.multiply(0);
}
@Test(expected = ArithmeticException.class)
public void testDivide() {
calculator.divide(0);
}
@Parameters
public static Collection data(){
Object[][] objs=new Object[][]{{-2,4},{0,0},{2,4}};
return Arrays.asList(objs);
}
public CalculatorTest(int input,int result){
this.param=input;
this.result=result;
}
@Test
public void testSquare() {
calculator.square(param);
assertEquals(result, calculator.getResult());
}
//Bug : 死循环
@Test(timeout = 1000)
public void testSquareRoot() {
calculator.squareRoot(4);
assertEquals(2, calculator.getResult());
}
@Test
public void testGetResult() {
calculator.clear();
result = 3;
calculator.add(3);
assertEquals(result, calculator.getResult());
}
}
实验任务3:
编写程序判断闰年,设计测试⽤例并⽤Junit进⾏测试。
源程序
package junit_test;
public class year {
public String panduan(int year){
String result = " ";
if(year%400==0||year%100!=0&&year%4==0){
result="闰年";
}else{
result="平年";
}
return result;
}
}
测试程序
package junit_test;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import junit.framework.TestCase;
public class yearTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testPanduan() {
year y=new year();
TestCase.assertEquals(y.panduan(2000), "闰年");
TestCase.assertEquals(y.panduan(1), "平年");
TestCase.assertEquals(y.panduan(100), "平年");
TestCase.assertEquals(y.panduan(2004), "闰年");
}
}
实验截图
实验任务4:
编写程序判断一般三角形,等腰三角形,等边三角形,设计测试用例并用JUnit进行测试。
源程序
package junit_test;
public class triangle {
public String panduan(int a,int b,int c){
String result=" ";
if(a+b>c&&a+c>b&&b+c>a){
if(a==b&&b==c){
result="等边三角形";
}else if(a==b||b==c||a==c){
result="等腰三角形";
}else{
result="一般三角形";
}
}else{
result="不是三角形";
}
System.out.print(result);
return result;
}
}
测试程序
package junit_test;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import junit.framework.TestCase;
public class triangleTest {
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testPanduan() {
triangle t=new triangle();
TestCase.assertEquals(t.panduan(1,2,3), "不是三角形");
TestCase.assertEquals(t.panduan(2,2,3), "等腰三角形");
TestCase.assertEquals(t.panduan(3,3,3), "等边三角形");
TestCase.assertEquals(t.panduan(4,2,3), "一般三角形");
}
}
运行截图
四、 个人体会
本次学会并练习了Junit测试方法,操作起来比较简单,在后面自己编写源程序有BUG,用测试代码也检测出来了。