開發(fā)者的Java測試用例淺析
前段時(shí)間,在項(xiàng)目組里做了一點(diǎn)java的測試用例,雖然沒有全自動化,也完成了半自動化的測試。比如:針對接口的測試,提供服務(wù)的測試等,都不需要啟動服務(wù),也不需要接口準(zhǔn)備好。我們只需要知道輸入輸出,便可以進(jìn)行testcase的編寫,這樣很方便。我們這邊這次完成的針對某一塊業(yè)務(wù)。
看一下一部分的完成情況
這次的主要目的還是來講TestCase
那什么是TestCase?
是為了系統(tǒng)地測試一個(gè)功能而由測試工程師寫下的文檔或腳本;
具體到j(luò)unit.framework. TestCase這個(gè)抽象類
其實(shí)網(wǎng)上有很多關(guān)于這方面的帖子,博客之類的,大家也可以找找,學(xué)習(xí)學(xué)習(xí)。畢竟我這里的理解還是很膚淺的
那第二點(diǎn),為什么需要編寫測試用例?
通俗易懂一點(diǎn):寫的目的就是為了記錄,并加以完善,因?yàn)闇y試一個(gè)功能往往不是走一遍就OK的,需要反復(fù)的改,反復(fù)的測,直到功能可以提交給客戶。
深度提煉一點(diǎn):
1) 測試用例被認(rèn)為是要交付給顧客的產(chǎn)品的一部分。測試用例在這里充當(dāng)了提高可信度的作用。典型的是UAT(可接受)級別。
2) 測試用例只作為內(nèi)部使用。典型的是系統(tǒng)級別的測試。在這里測試效率是目的。在代碼尚未完成時(shí),我們基于設(shè)計(jì)編寫測試用例,以便一旦代碼準(zhǔn)備好了,我們就可以很快地測試產(chǎn)品。
具體的參考:http://www.51testing.com/html/41/n-44641.html
深入的也不多說,網(wǎng)上這種東西很多。
正題:
使用JUnit時(shí),主要都是通過繼承TestCase類別來撰寫測試用例,使用testXXX()名稱來撰寫單元測試。
用JUnit寫測試真正所需要的就三件事:
1. 一個(gè)import語句引入所有junit.framework.*下的類。
2. 一個(gè)extends語句讓你的類從TestCase繼承。
3. 一個(gè)調(diào)用super(string)的構(gòu)造函數(shù)。
下面可以看一下TestCase的文檔介紹里的Example
1.構(gòu)建一個(gè)測試類
public class MathTest extends TestCase {
protected double fValue1;
protected double fValue2;
protected void setUp() {
fValue1= 2.0;
fValue2= 3.0;
}
}
2.一個(gè)Test方法以及斷言使用
public void testAdd() {
double result= fValue1 + fValue2;
assertTrue(result == 5.0);
}
3.運(yùn)行單個(gè)方法的使用
TestCase test= new MathTest("add") {
public void runTest() {
testAdd();
}
};
test.run();
或者
TestCase test= new MathTest("testAdd");
test.run();
4.運(yùn)行一組測試用例
public static Test suite() {
suite.addTest(new MathTest("testAdd"));
suite.addTest(new MathTest("testDividByZero"));
return suite;
}
還有下面這種方式
public static Test suite() {
TestSuite suite = new TestSuite("Running all tests.");
/*10000*/
suite.addTestSuite(TestAgentApi.class);
/*10001*/
suite.addTestSuite(TestAgentUxxApi.class);
}
運(yùn)行6個(gè),5個(gè)沒有通過,一目了然。
setUp和tearDown
/** * Sets up the fixture, for example, open a network connection. * This method is called before a test is executed. */ protected void setUp() throws Exception { } /** * Tears down the fixture, for example, close a network connection. * This method is called after a test is executed. */ protected void tearDown() throws Exception { } |
對于重復(fù)出現(xiàn)在各個(gè)單元測試中的運(yùn)行環(huán)境,可以集中加以管理,可以在繼承TestCase之后,重新定義setUp()與tearDown()方法,將數(shù)個(gè)單元測試所需要的運(yùn)行環(huán)境在setUp()中創(chuàng)建,并在tearDown()中銷毀。
Junit提供的種種斷言
JUnit提供了一些輔助函數(shù),用于幫助你確定某個(gè)被測試函數(shù)是否工作正常。通常而言,我們把所有這些函數(shù)統(tǒng)稱為斷言。斷言是單元測試最基本的組成部分。
方法:
assertEquals-期望值與實(shí)際值是否相等
assertFalse-布爾值判斷
assertTrue-布爾值判斷
assertNull-對象空判斷
assertNotNull-對象不為空判斷
assertSame-對象同一實(shí)例判斷
assertNotSame-檢查兩個(gè)對象是否不為同一實(shí)例
fail-使測試立即失敗
Junit和異常
1.從測試代碼拋出的可預(yù)測異常。
2.由于某個(gè)模塊(或代碼)發(fā)生嚴(yán)重錯誤,而拋出的不可預(yù)測異常。
這兩點(diǎn)的異常是我們比較關(guān)心的。下面展示一種情況:對于方法中每個(gè)被期望的異常,都應(yīng)寫一個(gè)專門的測試來確認(rèn)該方法在應(yīng)該拋出異常的時(shí)候確實(shí)會拋出異常。圖展示的是拋出異常才通過,不拋出異常,case不通過。
如圖
異常情況如下:
對于處于出乎意料的異常,我們最好簡單的改變我們的測試方法的聲明讓它能拋出可能的異常。JUnit框架可以捕獲任何異常,并且把它報(bào)告為一個(gè)錯誤,這些都不需要你的參與。
回顧一下如何使用Junit
JUnit的使用非常簡單,共有3步:
第一步、編寫測試類,使其繼承TestCase;
第二步、編寫測試方法,使用testXXX的方式來命名測試方法;
第三步、編寫斷言。
如果測試方法有公用的變量等需要初始化和銷毀,則可以使用setUp,tearDown方法。
posted on 2014-12-22 23:25 順其自然EVO 閱讀(493) 評論(0) 編輯 收藏 所屬分類: 測試學(xué)習(xí)專欄