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