一:junit 3.8使用原則
測試類必須要繼承與TestCase父類;
測試方式需要滿足如下原則:
1)public的
2)void的
3)無方法參數
4)方法名稱必須以test開頭
Test Case之間一定要保持完全的獨立性,不允許出現任何的依賴關係。
使用Assert中的各類assert方法,在測試代碼不會執行的地方插入Assert.fail()方法
我們不能依賴於測試方法的執行順序。
測試之前是什麼狀態,測試執行完畢後就應該是什麼狀態,而不應該由於測試執行的原因導致狀態發生了變化。
二:使用Junit的最佳實踐:
1) 新建一個名爲test的source folder,用於存放測試類源代碼
2) 目標類與測試類應該位於同一個包下面,這樣測試類中就不必導入源代碼所在的包,因爲他們位於同一個包下面
3) 測試類的命名規則:假如目標類是Calculator,那麼測試類應該命名爲TestCalculator或者是CalculatorTest
三:關於setUp與tearDown方法的執行順序:框架會先執行setUp,然後執行測試的方法(比如TestCase中的testAdd()),然後再執行tearDown方法。
四、執行方式:
1)使用ide比如eclipse自帶的gui運行框架,右鍵執行。
2)使用腳本調用:
junit.textui.TestRunner.run(CalculatorTest.class);//使用控制檯執行
junit.awtui.TestRunner.run(CalculatorTest.class);//調用junit自身的gui界面執行
五、實現案例:
待測試類Calculator:
package test;
//實現整數的加、減、乘、除
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
public int multiply(int a, int b) {
return a * b;
}
public int divide(int a, int b) throws Exception {
if(0 == b)
throw new Exception("除數不能爲0");
return a / b;
}
}
待測試類DeleteAll:
package test;
import java.io.File;
//實現刪除某一個文件或者某一個目錄下的所有文件
public class DeleteAll
{
public static void deleteAll(File file)
{
if(file.isFile() || file.list().length == 0)
{
file.delete();
}
else
{
File[] files = file.listFiles();
for(File f : files)
{
deleteAll(f);
f.delete();
}
}
}
}
測試類:CalculatorTest
package test;
import junit.framework.Assert;
import junit.framework.TestCase;
public class CalculatorTest extends TestCase {
private Calculator cl;
public CalculatorTest(String name) {
super(name);
}
@Override
protected void setUp() throws Exception {
System.out.println("set up");
cl = new Calculator();
}
@Override
protected void tearDown() throws Exception {
System.out.println("tear down");
}
public void testAdd() {
int result = cl.add(1, 2);
Assert.assertEquals(3, result);
}
public void testSubtract() {
int result = cl.subtract(1, 2);
Assert.assertEquals(-1, result);
}
public void testMultiply() {
int result = cl.multiply(3, 2);
Assert.assertEquals(6, result);
}
public void testDivide() {
int result = 0;
try {
result = cl.divide(6, 2);
} catch (Exception e) {
e.printStackTrace();
Assert.fail();
}
Assert.assertEquals(3, result);
}
public void testDivideDivideByZero() {
Throwable tx = null;
try {
cl.divide(6, 0);
Assert.fail("測試失敗");
} catch (Exception e) {
tx = e;
}
Assert.assertEquals(Exception.class, tx.getClass());
Assert.assertEquals("除數不能爲0", tx.getMessage());
}
}
package test;
import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
批量執行測試案例,使用測試套件TestSuite
package test;
import junit.extensions.RepeatedTest;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
public class TestAll extends TestCase{
public static Test suite() {
//新建一個測試套件
TestSuite suite = new TestSuite();
//裝載CalculatorTest類,將執行CalculatorTest類中的所有測試案例
suite.addTestSuite(CalculatorTest.class);
suite.addTestSuite(LargestTest.class);
suite.addTestSuite(DeleteAllTest.class);
//表示將CaculatorTest類中的testSubtract執行20次
suite.addTest(new RepeatedTest(new CalculatorTest("testSubtract"), 20));
return suite;
}
}