1.部署环境
1.安装JDK环境
相信你已经部署好了,在此就不再多做介绍。
2.安装eclipse
相信你已经安装好了,在此就不再多做介绍。
3.引入JUnit4包
下载完将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运行结果
如右图可以看到,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 再次运行
如右图可以看到,经过修复后,所有都测试都通过了。
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 运行结果
如右图可以看到,所有测试用例均通过。
Comments | NOTHING