您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > junit
怎樣使用Junit Framework進(jìn)行單元測(cè)試的編寫(xiě)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/4/3 14:14:29 ] 推薦標(biāo)簽:

     */
     public void testConnectionProxyStart() {
         int minConnections = 0;
         int maxConnections = 0;
         assertNotNull(cacheImpl);
         try      {
             minConnections = Integer.parseInt(PropertyManager.getProperty
             ("DefaultConnectionProxy.minConnections"));
             maxConnections = Integer.parseInt(PropertyManager.getProperty
             ("DefaultConnectionProxy.maxConnections"));
         } catch (Exception e) {
             // ignore the exception
         }
         assertEquals(cacheImpl.getMinLimit(), minConnections);
         assertEquals(cacheImpl.getMaxLimit(), maxConnections);
         assertEquals(cacheImpl.getCacheSize(), minConnections);
     }
     /** 對(duì)示例一中的對(duì)象進(jìn)行獲取數(shù)據(jù)庫(kù)連接的測(cè)試,看看是否可以獲取有效的數(shù)據(jù)庫(kù)連接,
并且看看獲取連接后,連接池的狀態(tài)是否按照既定的策略進(jìn)行變化。由于 assert 方法拋出的是
 error 對(duì)象,因此盡可能把 assert 方法放置到方法的后集體進(jìn)行測(cè)試,這樣在方法內(nèi)打開(kāi)的
資源,才能有效的被正確關(guān)閉。
     */
     public void testGetConnection() {
         int cacheSize = cacheImpl.getCacheSize();
         int activeSize = cacheImpl.getActiveSize();
         int cacheSizeAfter = 0;
         int activeSizeAfter = 0;
         con = conProxy.getConnection();
         if (con != null) {
             activeSizeAfter = cacheImpl.getActiveSize();
             cacheSizeAfter = cacheImpl.getCacheSize();
           
             try      {
                 con.close();
             } catch (SQLException e) {
             }
         } else {
             assertNotNull(con);
         }
         /* 如果連接池中的實(shí)際使用連接數(shù)小于緩存連接數(shù),檢查獲取的新的數(shù)據(jù)連接是否
從緩存中獲取,反之連接池是否建立新的連接
         */
         if (cacheSize > activeSize)      {
             assertEquals(activeSize + 1, activeSizeAfter);
             assertEquals(cacheSize, cacheSizeAfter);
         } else {
             assertEquals(activeSize + 1, cacheSizeAfter);
         }
     }
     /** 對(duì)示例一中的對(duì)象進(jìn)行數(shù)據(jù)庫(kù)連接釋放的測(cè)試,看看連接釋放后,連接池的
狀態(tài)是否按照既定的策略進(jìn)行變化。由于 assert 方法拋出的是 error 對(duì)象,因此盡可
能把 assert 方法放置到方法的后集體進(jìn)行測(cè)試,這樣在方法內(nèi)打開(kāi)的
資源,才能有效的被正確關(guān)閉。
     */
     public void testConnectionClose() {
         int minConnections = cacheImpl.getMinLimit();
         int cacheSize = 0;
         int activeSize = 0;
         int cacheSizeAfter = 0;
         int activeSizeAfter = 0;
         con = conProxy.getConnection();
         if (con != null) {
             cacheSize = cacheImpl.getCacheSize();
             activeSize = cacheImpl.getActiveSize();
             try      {
                 con.close();
             } catch (SQLException e) {
             }
             activeSizeAfter = cacheImpl.getActiveSize();
             cacheSizeAfter = cacheImpl.getCacheSize();
         } else {
             assertNotNull(con);
         }
         assertEquals(activeSize, activeSizeAfter + 1);
         /* 如果連接池中的緩存連接數(shù)大于少緩存連接數(shù),檢查釋放數(shù)據(jù)連接后是否
緩存連接數(shù)比之前減少了一個(gè),反之緩存連接數(shù)是否保持為少緩存連接數(shù)
         */
         if (cacheSize > minConnections)      {
             assertEquals(cacheSize, cacheSizeAfter + 1);
         } else {
             assertEquals(cacheSize, minConnections);
         }
     }
   
 /** 釋放建立測(cè)試起始環(huán)境時(shí)的資源。
     */
 protected void tearDown() {
         cacheImpl = null;
         conProxy.destroy();
     }
     public DefaultConnectionProxyTest(String name) {
         super(name);
     }
 /** 你可以簡(jiǎn)單的運(yùn)行這個(gè)類(lèi)從而對(duì)類(lèi)中所包含的測(cè)試單元進(jìn)行測(cè)試。
     */
     public static void main(String args[]) {
         junit.textui.TestRunner.run(DefaultConnectionProxyTest.class);
     }
 }


當(dāng)單元測(cè)試完成后,我們可以用 Junit 提供的 TestSuite 對(duì)象對(duì)測(cè)試單元進(jìn)行組織,你可以決定測(cè)試的順序,然后運(yùn)行你的測(cè)試。

4. 如何維護(hù)單元測(cè)試

通過(guò)上面的描述,我們對(duì)如何確定和編寫(xiě)測(cè)試有了基本的了解,但是需求總是變化的,因此我們的單元測(cè)試也會(huì)根據(jù)需求的變化不斷的演變。如果我們決定修改類(lèi)的行為規(guī)則,可以明確的是,我們當(dāng)然會(huì)對(duì)針對(duì)這個(gè)類(lèi)的測(cè)試單元進(jìn)行修改,以適應(yīng)變化。但是如果對(duì)這個(gè)類(lèi)僅有調(diào)用關(guān)系的類(lèi)的行為定義沒(méi)有變化則相應(yīng)的單元測(cè)試仍然是可靠和充分的,同時(shí)如果包含行為變化的類(lèi)的對(duì)象的狀態(tài)定義與其沒(méi)有直接的關(guān)系,測(cè)試單元仍然起效。這種結(jié)果也是封裝原則的優(yōu)勢(shì)體現(xiàn)。

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd