qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          開發(fā)者的Java測試用例淺析

          前段時(shí)間,在項(xiàng)目組里做了一點(diǎn)java測試用例,雖然沒有全自動化,也完成了半自動化的測試。比如:針對接口的測試,提供服務(wù)的測試等,都不需要啟動服務(wù),也不需要接口準(zhǔn)備好。我們只需要知道輸入輸出,便可以進(jìn)行testcase的編寫,這樣很方便。我們這邊這次完成的針對某一塊業(yè)務(wù)。
            看一下一部分的完成情況
            這次的主要目的還是來講TestCase
            那什么是TestCase?
            是為了系統(tǒng)地測試一個(gè)功能而由測試工程師寫下的文檔或腳本;
            Junit測試是程序員測試,即白盒測試(個(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í)專欄

          <2014年12月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 同江市| 织金县| 南郑县| 湖口县| 潮安县| 五华县| 曲阳县| 龙川县| 三江| 七台河市| 太白县| 英吉沙县| 朝阳区| 桑日县| 隆回县| 永川市| 茂名市| 宜阳县| 拉萨市| 大竹县| 原阳县| 大连市| 孟村| 二连浩特市| 扶沟县| 阿瓦提县| 巧家县| 建宁县| 桐城市| 阿拉尔市| 金昌市| 恩施市| 兰州市| 和顺县| 安福县| 天津市| 阜新市| 登封市| 红河县| 中方县| 兴仁县|