<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    路是爬出來的

    用easymock測試jdbc

         雖然以前用easymock測試過Dao,但那些Dao的實現,要么就hibernate,要么就用spring,而這兩個框架的執行正確與否我們是不用關心的。JDBC是不是也這樣測試了。答案是肯定的。

          這幾天要用存儲過程跟jdbc來做個項目,想想也有好長一段時間沒用過JDBC來做項目了。該復習復習了。

          前陣子學了easymock,真好現在可以派上用場了。不過在測試的過程中還是遇到了不小問題,想來是自己基礎不好的緣故。



           這次不TDD了,太麻煩了。

           先看看我們要測試的代碼

         

    java 代碼


     


    1. CallableStatementcstmt = null;  

    2.         try {  

    3.             cstmt = _conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");  

    4.             cstmt.setString(1"1");  

    5.             cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  

    6.   

    7.             cstmt.executeUpdate();  

    8.             return cstmt.getString(2);  

    9.   

    10.         } catch (Exception e) {  

    11.             GxDebug.logException(e);  

    12.             e.printStackTrace();  

    13.             return null;  

    14.         } finally {  

    15.             if (cstmt != null)  

    16.                 try {  

    17.                     cstmt.close();  

    18.                 } catch (Exception e) {  

    19.             }  

    20.         }  



      代碼還挺長的。從上面的代碼我們知道我們必須mock兩個對象進去。一個是Connection, 一個是CallableStatementcstmt 。

    好再看看我們的測試代碼

    java 代碼



    1. conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");  

    2.     conControl.setReturnValue(cstmt);  

    3.     conControl.replay();  

    4.       

    5.     cstmt.setString(1"1");  

    6.     cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  

    7.     cstmt.executeUpdate();  

    8.     cstmtControl.setReturnValue(1);  

    9.     cstmt.getString(2);  

    10.     cstmtControl.setReturnValue("5,4,3");  

    11.     cstmt.close();  

    12.     cstmtControl.replay();  

    13.       

    14.       

    15.     String rusult = dao.getNumber();  

    16.     Assert.assertEquals("5,4,3", rusult);  

    17.       

    18.     conControl.verify();  

    19.     cstmtControl.verify();  





    oh,my got!測試代碼比實現代碼還要多。這段代碼能執行嗎?

    我想可以的。easymock的原理是記錄-回放的模式。

    我想要做的工作是:

    1,記錄你mock對象的工作記錄,比如上面的代碼我們mock對象的工作記錄是:

    java 代碼



    1. conn.prepareCall("{call LUCK_LOAD_COMMON(?,?)}");  

    2.         conControl.setReturnValue(cstmt);  

    3.         cstmt.setString(1"1");  

    4.         cstmt.registerOutParameter(2, java.sql.Types.VARCHAR);  

    5.         cstmt.executeUpdate();  

    6.         cstmtControl.setReturnValue(1);  

    7.         cstmt.getString(2);  

    8.         cstmtControl.setReturnValue("5,4,3");  

    9.         cstmt.close();  

    10.   





     如果你工作記錄的代碼要求有返回值的話,那么你必須提供一個自定義的值給它,否則會報錯。比如上面的


  •  cstmt.getString(2);  

  •         cstmtControl.setReturnValue("5,4,3");   //自己定義的返回值,用作以后的比較。



  • 上面的是記錄操作,回放的時候,easymock會把記錄的操作跟你實際的代碼進行比較,如果里面出了什么差錯,那么不好意思你的代碼有問題,請修正后再測試。



    如果有興趣可以自己試下。

    posted on 2006-12-30 09:06 路是爬出來的 閱讀(187) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 特级毛片全部免费播放a一级| 免费日本一区二区| 精品亚洲视频在线观看 | 18禁男女爽爽爽午夜网站免费| 亚洲成人高清在线观看| 国产人成免费视频| 久久久国产精品无码免费专区| 亚洲午夜理论片在线观看| 久久亚洲AV永久无码精品| AV大片在线无码永久免费| 一级**爱片免费视频| 亚洲春色在线观看| 亚洲性久久久影院| 波多野结衣中文字幕免费视频| 免费人人潮人人爽一区二区| 亚洲国产成人无码av在线播放 | 国产精品亚洲专区在线观看| 亚洲男人天堂2020| 久久久www成人免费毛片| 一级**爱片免费视频| 亚洲欧美日韩自偷自拍| 阿v视频免费在线观看| 337p欧洲亚洲大胆艺术| 亚洲国产精品自产在线播放 | 国产人成免费视频| 久久午夜免费视频| 人人揉揉香蕉大免费不卡| 免费看一级高潮毛片| 亚洲精品天堂在线观看| 久久久久亚洲AV片无码| 亚洲国产成人精品91久久久| 67194熟妇在线永久免费观看| 国产免费AV片在线观看| 免费精品久久久久久中文字幕| 亚洲大尺码专区影院| 亚洲AV综合色区无码一区| 亚洲国产精品国产自在在线| 四虎影视www四虎免费| 2021精品国产品免费观看| 国产无遮挡无码视频免费软件| 国产精品内射视频免费|