国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

利用 easymock 測試 jdbc 分析

2019-11-18 15:35:10
字體:
來源:轉載
供稿:網友
    雖然以前用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會把記錄的操作跟你實際的代碼進行比較,假如里面出了什么差錯,那么不好意思你的代碼有問題,請修正后再測試。

    假如有愛好可以自己試下。



  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 灵寿县| 丹江口市| 平乐县| 龙海市| 永川市| 开化县| 贞丰县| 鹤岗市| 汝城县| 涿州市| 宁蒗| 安吉县| 疏附县| 临西县| 进贤县| 璧山县| 大田县| 连云港市| 西平县| 乐业县| 衢州市| 灵寿县| 汶川县| 石狮市| 黄石市| 海原县| 钦州市| 涪陵区| 宁远县| 九龙坡区| 独山县| 莲花县| 信宜市| 湛江市| 肥城市| 青冈县| 永平县| 太康县| 敖汉旗| 涟源市| 积石山|