qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          JUnit+JMockit單元測試

           1、簡介
            對編碼完成的功能,進行測試,是每個程序員最熟悉不過的事了,每完成一部分功能,都需要對實現的功能進行測試,然后才能進行交付。但如何保證自己完成的每個功能都是正確無誤的呢?對,單元測試
            2、JUnit
            2.1 pom中增加Junit的jar的依賴
            <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            </dependency>
            2.2 增加單元測試類
            例如,要測試的類為src下的com.runqianapp.userManager.dao.UserDao類中的
            publicStringgetUserName(StringuserId)方法
            則首先新建一個test的源碼目錄,原因是測試代碼要與原功能代碼分離,自動構建的時候,只需要把原功能的代碼構建到最新的jar里。然后新建跟被測試類相同的包路徑,如
            test下的com.runqianapp.userManager.dao.UserDaoTest
            這樣,就為UserDao建好了一個單元測試類,
            對于被測試的方法,需要傳不同的參數,來檢驗方法的正確性,這個時候,不必寫多個@Test來測試,而是把需要傳入的參數放入配置文件,然后讀配置文件。
            參數配置文件的位置是與單元測試類同一目錄下,如
            test下com.runqianapp.userManager.dao.testData_UserDao
            2.3 JUnit的常用注解介紹
            2.3.1 @Test
            需要運行的單元測試方法,可以有多個
            2.3.2 @Before
            在每一個@Test方法運行之前都會被運行,可以用來初始化方法
            2.3.3 @Before
            在每一個@Test方法運行之后都會被運行,可以用來方法的釋放資源
            2.3.4 @BeforeClass
            針對整個單元測試類,只會被運行一次,在所有方法運行之前被運行,可以用來初始化環境
            必須聲明成staticvoid
            2.3.5 @AfterClass
            針對整個單元測試類,只會被運行一次,在所有方法運行之后被運行,可以用來釋放資源
            必須聲明成staticvoid
            2.4 斷言
            對于需要測試的方法,用斷言來判斷其它執行結果是否正確。
            assertEquals([Stringmessage],expected,actual)
            message是個可選的消息,將會在發生錯誤時報告這個消息。
            expected是期望值,通常都是用戶指定的內容。
            actual是被測試的代碼返回的實際值。
            如:
            booleansuccess=update();
            assertEquals(“更新是否成功”,true,success)
            這樣,當運行update()的返回值不為true的時候,這個單元測試就會失敗。
            但有些時候,我們測試的方法并沒有返回值,方法只是執行一個動作,那么這個時候,我們就不能用判斷的返回值來判斷方法是否執行成功。
            如新建文件的方法,publicvoidcreateFile(StringfilePath),這個時候,方法并沒有返回值,我們在判斷方法是否執行成功的時候,可以寫一個輔助方法,來檢查一下指定的文件是否新建成功了,以此來驗證createFile()的準備性。如:
            createFile(“d:/a.txt”);
            booleanexist=fileExist(“d:/a.txt”);
            assertEquals(“新建文件”,true,exist);
            3、JMockit
            當我們在編寫單元測試的時候,常常會出現一些如調用的方法需要其它對象提供,而這個類現在又不具備,如很難創建、沒有環境、沒有開發完等情況,這個時候,我們就需要用JMockit模擬出一個類,來滿足我們的需求,來完成我們核心功能的測試。
            3.1 pom中增加JMockit的依賴
          <dependency>
          <groupId>jmockit</groupId>
          <artifactId>jmockit</artifactId>
          <version>1.0</version>
          <scope>test</scope>
          </dependency>
            3.2 模擬對象
            如需要測試的一個方法的一個值是配置在misInitConfig.xml中的,而misInitConfig.xml中的值需要用ReadConfInfo.getPropery()來獲取,而ReadConfInfo是在應用啟動時初始化的,這個時候并沒有web環境,也不能初始化,而我們也不需要自己手動初始化ReadConfInfo,因為我們測試的重點不是ReadConfInfo,而是我們現有的功能。這個時候,我們就可以用JMockit模塊出ReadConfInfo,來完成此功能的測試。
          /**
          *模擬ReadConfInfo
          */
          publicstaticvoidmockReadConfInfo(){
          newMockUp<ReadConfInfo>(){
          @Mock
          publicStringgetPropery(StringpropertyName){
          if("conf_loglevel".equals(propertyName)){
          return"debug";
          }elseif("conf_logfolder".equals(propertyName)){
          return"log";
          }else{
          return"";
          }
          }
          }
          }
            在單元測試的@BeforCalss中初始化,
          /**
          *初始化環境
          */
          @BeforeClass
          publicstaticvoidinit()throwsException{
          //模擬ReadConfInfo
          mockReadConfInfo();
          }
            這樣,我們就可以在程序中使用ReadConfInfo.getPropery()來完成我們的功能了。

          posted on 2014-03-27 16:30 順其自然EVO 閱讀(522) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 徐汇区| 平塘县| 双峰县| 宁陕县| 万山特区| 红原县| 白城市| 龙泉市| 囊谦县| 大冶市| 通渭县| 北票市| 宣化县| 资溪县| 巴青县| 日土县| 新龙县| 陆丰市| 定安县| 金湖县| 滨海县| 扎兰屯市| 建瓯市| 黄浦区| 西畴县| 石渠县| 和林格尔县| 积石山| 黑龙江省| 措美县| 南陵县| 犍为县| 安国市| 临沭县| 深州市| 临海市| 宁波市| 霍山县| 贵溪市| 石门县| 新田县|