二、遷移一個(gè)測試類
現(xiàn)在,我將把一個(gè)已經(jīng)使用JUnit 3.8編寫成的簡單的測試類遷移到JUnit 4。這個(gè)類有一些缺陷:它沒有測試所有的業(yè)務(wù)方法,而且看上去在testDivide方法中還存在一個(gè)錯誤(8/2不等于5)。因?yàn)檫沒有實(shí)現(xiàn)乘法運(yùn)算功能,所以對其測試將被忽略。
下面,我們把兩個(gè)版本的框架之間的差別以粗體顯示出現(xiàn)于表格1中。
表格1.分別以JUnit 3.8和JUnit 4實(shí)現(xiàn)的CaculatorTest。
JUnit 3.8
package junit3;
import calc.Calculator;
import junit.Framework.TestCase;
public class CalculatorTest extends TestCase {
private static Calculator calculator = new Calculator();
@Override protected void setUp() { calculator.clear(); }
public void testAdd() {
calculator.add(1);
calculator.add(1);
assertEquals(calculator.getResult(), 2);
}
public void testSubtract() {
calculator.add(10);
calculator.subtract(2);
assertEquals(calculator.getResult(), 8);
}
public void testDivide() {
calculator.add(8);
calculator.divide(2);
assert calculator.getResult() == 5;
}
public void testDivideByZero() {
try {
calculator.divide(0);
fail();
}
catch (ArithmeticException e) { }
}
public void notReadyYetTestMultiply() {
calculator.add(10);
calculator.multiply(10);
assertEquals(calculator.getResult(), 100);
}
}
JUnit 4
package JUnit 4;
import calc.Calculator;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import static org.junit.Assert.*;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
@Before public void clearCalculator() {
calculator.clear();
}
@Test public void add() {
calculator.add(1);
calculator.add(1);
assertEquals(calculator.getResult(), 2);
}
@Test public void subtract() {
calculator.add(10);
calculator.subtract(2);
assertEquals(calculator.getResult(), 8);
}
@Test public void divide() {
calculator.add(8);
calculator.divide(2);
assert calculator.getResult() == 5;
}
@Test(expected = ArithmeticException.class)
public void divideByZero() {
calculator.divide(0);
}
@Ignore("not ready yet")
@Test
public void multiply() {
calculator.add(10);
calculator.multiply(10);
assertEquals(calculator.getResult(), 100);
}
}