软件测试基础 JUnit4测试实验

发布于 2019-09-25  88 热度


1.部署环境

1.安装JDK环境

相信你已经部署好了,在此就不再多做介绍。

2.安装eclipse

相信你已经安装好了,在此就不再多做介绍。

3.引入JUnit4包

下载地址:junit-4.13-beta-3.jar

下载完将Jar包Add to Build Path。

2.计算器类:Calculator实例

2.1 计算器类:Calculator.java

package Calculator;

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;
    }

}

2.2 编写测试类:CalculatorTest.java

package Calculator;

import static org.junit.Assert.assertEquals;

import org.junit.Before;
import org.junit.Test;

public class CalculatorTest {
	Calculator cal;
	@Before
	public void before() {
		cal = new Calculator();
	}
	@Test
	public void add() {
		cal.clear();//清空
		cal.add(4);//单次加法
		assertEquals(4,cal.getResult());

		cal.clear();//清空
		cal.add(11);
		cal.add(-2);
		cal.add(0);//连续加法
		assertEquals(9,cal.getResult());
	}
	@Test
	public void substract() {
		cal.clear();//清空
		cal.substract(2);//单次减法
		assertEquals(-2,cal.getResult());

		cal.clear();//清空
		cal.substract(4);
		cal.substract(0);
		cal.substract(-3);//连续减法
		assertEquals(-1,cal.getResult());
	}
	@Test
	public void multiply() {
		cal.clear();//清空
		cal.add(2);//先令result=2
		cal.multiply(4);//单次乘法
		assertEquals(8,cal.getResult());

		cal.clear();//清空
		cal.add(2);//先令result=2
		cal.multiply(3);
		cal.multiply(4);
		cal.multiply(5);//连续乘法
		assertEquals(120,cal.getResult());
	}
	@Test
	public void divide() {
		cal.clear();//清空
		cal.add(64);//先令result=64
		cal.divide(4);//单次除法
		assertEquals(16,cal.getResult());

		cal.clear();//清空
		cal.add(128);//先令result=128
		cal.divide(4);
		cal.divide(8);//连续除法
		assertEquals(4,cal.getResult());
	}
	@Test
	public void square() {
		cal.clear();//清空
		cal.square(5);
		assertEquals(25,cal.getResult());
	}
	@Test
	public void squareRoot() {
		cal.clear();//清空
		cal.squareRoot(36);
		assertEquals(6,cal.getResult());
	}
	
}

3.3运行结果

软件测试基础 JUnit4测试实验

如右图可以看到,add、divide、square都测试通过,substract、multiply没有通过,squareRoot依然在运行,没有出结果。

于是就可以推测出substract、multiply中存在逻辑错误,squareRoot中存在低效率算法或者死循环。

2.3 将Calculator.java修复完善

package Calculator;

public class Calculator {

    private static int result; // 静态变量,用于存储运行结果
    public void add(int n) {
        result = result + n;
    }
    public void substract(int n) {
        result = result - n;  //Bug: 正确的应该是 result =result-n
    }
    public void multiply(int n) {
    	result = result * n;
    }
    public void divide(int n) {
        result = result / n;
    }
    public void square(int n) {
        result = n * n;
    }
    public void squareRoot(int n) {
        for (int i = 0;i<=n ;i++) {
        	if( i*i ==n) {
        		result = i;
        		break;
        	}
        }
    }
    public void clear() {     // 将结果清零
        result = 0;
    }
    public int getResult() {
        return result;
    }

}

2.4 再次运行

软件测试基础 JUnit4测试实验

如右图可以看到,经过修复后,所有都测试都通过了。

3.图书借阅类Book测试实例

3.1 图书借阅类:Book.java

package Book;

public class Book {
	public String name;// 书名
	public String author;// 作者
	private int availNum;// 可借数量

	public Book() {
		this("", "", 0);
	}

	public Book(String name, String author, int availNum) {
		this.name = name;
		this.author = author;
		this.availNum = availNum;
	}

	/**
	 * * 获取可借数量* * @return
	 */
	public int getAvailNum() {
		return availNum;
	}

	/**
	 * * 设置可借数量* * @param availNum
	 */
	public void setAvailNum(int availNum) {
		this.availNum = availNum;
	}

	/**
	 * * 预借* * @return 成功返回true,失败返回false
	 */
	public boolean subscribe() {
		if (availNum > 0) {
			availNum--;
			return true;
		}
		return false;
	}

	/**
	 * * 取消预借* * @return 成功返回true,失败返回false
	 */
	public boolean cancelSubscribe() {
		availNum++;
		return true;
	}
}

3.2 编写测试类:BookTest.java

package Book;

import org.junit.Test;
import static org.junit.Assert.assertEquals;

import org.junit.Before;

public class BookTest {
	public Book book;

	@Before
	@Test
	public void Book() {// 测试构造方法及getAvailNum()
		book = new Book();
		assertEquals("", book.name);
		assertEquals("", book.author);
		assertEquals(0, book.getAvailNum());

		String name = "老人与海";
		String author = "海明威";
		int availNum = 6;
		book = new Book(name, author, availNum);
		assertEquals(name, book.name);
		assertEquals(author, book.author);
		assertEquals(availNum, book.getAvailNum());
	}

	@Test
	public void setAvailNum() {
		book.setAvailNum(10);
		assertEquals(10, book.getAvailNum());
		book.setAvailNum(0);
		assertEquals(0, book.getAvailNum());
	}

	@Test
	public void subscribe() {
		book.setAvailNum(2);// 先初始化共2本书可借
		assertEquals(true, book.subscribe());// 有书都时候应借书成功
		assertEquals(1, book.getAvailNum());// 可借书都数量-1

		book.setAvailNum(0);// 先初始化共0本书可借
		assertEquals(false, book.subscribe());// 没有书都时候借书失败
		assertEquals(0, book.getAvailNum());// 应剩余0本书可借
	}

	@Test
	public void cancelSubscribe() {
		book.setAvailNum(2);// 先初始化共2本书可借
		assertEquals(true, book.cancelSubscribe());// 还书一定成功
		assertEquals(3, book.getAvailNum());// 可借书都数量+1
	}
}

3.3 运行结果

软件测试基础 JUnit4测试实验

如右图可以看到,所有测试用例均通过。

 


我一直在开辟我的天空