初學junit筆記一

2021-08-30 22:42:24 字數 3656 閱讀 2848

在junit3.8中,測試方法滿足如下原則:

1)public的

2)void的

3)無方法引數

4)方法名稱必須以test開頭

5)繼承自testcase

出名的語句:keep the bar green to keep the code clean

測試乙個方法會在某種情況下丟擲異常的方法:

public void testdivide2()

throwable tx = null;

trycalculator cal = new calculator();

cal.divide(3,0);

assert.fail();         //junit程式執行到這個語句時會直接終止testcase的往下執行,用來驗證不會執行到這個語句

}catch(exception e)

tx = e;

assert.assertnotnull(tx);

assert.assertequals(exception.class , tx.getclass());

assert.assertequals("除數不能為0" , tx.getmessage());

public void testdivide1()

int result = 0;

trycalculator cal = new calculator();

result = cal.divide(6,4);

}catch(exception e)

assert.fail();         //junit程式執行到這個語句時會直接終止testcase的往下執行,用來驗證不會執行到這個語句

assert.assertequals(1 , result);

千萬不要將要測試的方法丟擲的異常在testcase中不捕獲,繼續往上拋

public void testdivide2() throws exception      //不要這樣寫測試用例

不要寫重複的**(don't repeat yourself)

setup方法是在每乙個testcase執行之前都會執行的方法,而teardown是每乙個testcase執行之後都會執行的方法

那麼有沒有一種方法是在所有的testcase執行之前執行,並且只執行一次,又有沒有另一種方法是在所有的testcase執行完後再執行的呢?在junit3.8裡是沒有提供這樣的方法的,但在junit4中已經支援了這種方法

用命令列的方式執行testcase:

不用eclipse等工具時,testcase應該怎樣去執行呢?

1、命令列方式(適用於和ant整合)

public static void main(string args)

junit.textui.testrunner.run(calculatortest.class);

2、swing圖形化的方式

public static void main(string args)

junit.swingui.testrunner.run(calculatortest.class);

3、awt圖形化的方式

public static void main(string args)

junit.awtui.testrunner.run(calculatortest.class);

如何一次執行多個testcase類??

public class testall extends testcase

public static test suite()

testsuite suite = new testsuite();

suite.addtestsuite(calculatortest.class);

suite.addtestsuite(largesttest.class);

return suite;

public static test suite()也是型別於testcase一樣可以直接執行的方法,執行它就可以一次性將多個testcase類一次性執行了

public static test suite()這個方法的簽名是固定的,不能有任何改變

testsuite裡不僅可以包含testcase測試類,還可以包含testsuite測試類,如有另乙個類有如下語句將上面的suite包含在一起:

suite.addtestsuite(testall.class);

suite.addtestsuite(othersuite.class);

這裡使用了組合模式

junit4

不需要繼承自testcase

setup的功能在4中是使用@before來達到,相應的teardonw使用@after,而在所有的testcase執行之前執行並且僅僅執行一次的方法使用@beforeclass註解相應的也有@afterclass

測試拋異常的方法:

@test(expected = exception.class)

public void mydivide2() throws exception

cal.divide(1 , 0 );

上面的程式表示方法內的語句必須丟擲乙個exception異常,該testcase才會被認為通過,且這時不能再像上面的junit3一樣,在程式內把它捕獲,捕獲後就不再往上拋了,也就會被認為沒有通過。

@test(timeout = 100)

表示testcase的執行不能超過100毫秒

在使用junit4時,使用assert斷言時,eclipse有時會匯入junit3的assert類!!!

當某個用例還沒有實現完畢或者還不太完善,但又不想影響其它用例的執行,可以使用@ignore來註解該用例,當執行該類時就不會執行這個用例了

執行多個測試類

@runwith(suite.class)

@suiteclasses(atest.class, btest.class, ctest.class)

public class abcsuite , , ,

, , , });

例子@runwith(parameterized.class)

public class parametertest

private int expected;

private int input1;

private int input2;

public class fibonaccitest , , ,

, , , });

//資料的構造為0=0+0 , 2 =1+1,3=2+1...

public parametertest(int expected , int input1,int input2)

this.expected = expected;

this.input1 = input1;

this.input2 = input2;

@test

public void testadd()

calculator cal = new calculator();

assertequals(expected , cal.add(input1,input2));

測試私有方法----用反射

int.class == integer.type int  獲取int對應的class物件

integer.class 獲得integer對應的class物件

JUnit 學習筆記

寫了個類,要給別人用,會不會有bug 怎麼辦?測試一下。用main 方法測試好不好?不好!1.不能一起執行!2.大多數情況下需要人為的觀察輸出確定是否正確 重用測試,應付將來的實現的變化。提高士氣,明確知道我的東西是沒問題的。1.new project 2.建立類 3.建立testcase 1.as...

junit學習筆記

test 測試乙個方法 before 測試方法的前置條件 每個方法執行之前都會執行 after 測試方法的後置條件 每個方法執行之後都會執行 beforeclass 測試方法的前置條件 在類載入的時候就呼叫,只執行一次 標記的方法需要為static的 afterclass 測試方法的後置條件 在類銷...

Junit模式筆記

junit模式筆記 by nicolas 命令模式 junit執行命令,測試人員編寫命令 testcase 提交給junit testcase有預設方法run 測試人員繼承該類 使得測試人員只需關心測試用例 組合模式 將多個testcase公升級為測試集 測試集的run 執行集的每個成員的run 模...