路是爬出來的

          導航

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          統計

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          [導入]我的第一個真正意義上的測試

                 前段日子很無聊,也是很無奈的。經過了這段日子的,我想了很多事情,雖然全部想通,但卻努力的去想了。我想這樣就Ok了

          對嗎?

                 好了。前陣子,老板請喝早茶,順便跟我們這些技術人員討論了怎么樣可以提高我們內功的問題。我老板也是技術出身的。有相當多的經驗,當然我最初的想法并不是去研究測試,我直接提出:“我覺得我們應該提高我們對設計模式的理解”。他卻不怎么同意,說測試才是我們現在的當務之急,然后很肯定的說。TDD,重構都是建立再單元測試基礎上的。并推翻了我的建議:”有空讓對設計模式有深厚理解的員工給我們上課“。

                 開始由于我個人原因,或許我是個很情緒話的員工,也許在另外一家公司我可能早就被T。也許老板對我太好了。^_^

          我當時不怎么響應,總是做自己喜歡做的事情,后來自己慢慢覺得自己的工作態度不對,所以昨天試著努力糾正自己的錯誤,真是在這樣的環境下,自己寫出了自己第一個我認為真正意義上的測試,把它記錄下來。

                 測試的要求:

                 測試對一個Account的Dao操作以及Service。

          java 代碼


           


          1. //先來測試最基本的dao吧  

          2. package org.wuhua.dao;  

          3.   

          4. import java.util.Collection;  

          5.   

          6. public interface IBaseDao {  

          7.     Object save(Object o);  

          8.     void delete(Object o);  

          9.     Object update(Object o);  

          10.     Collection list();  

          11. }  



          根據我的理解,測試的對方要跟mock的對象分開,(開始我一直認為你要mock的對象就是你要測試的東西,搞著搞著,我就很迷茫了。)。現在要做的就是看你IBaseDao的實現是什么了。如果實現是采用SpringHibernateTemplate的話你就去mock一個這樣對象,不過此對象并不是接口,所以你要用到easymock的擴展包,以對它的支持。如果你實現的采用純Hibernate的話。那你就去mock一個SessionFactory吧。很簡單吧,難道這就是所謂的解耦嗎?我想是的,這正是解耦。 哈哈



          看下我的實現吧,采用Spring實現。

          java 代碼


           


          1. package org.wuhua.dao.impl;  

          2.   

          3. import java.util.Collection;  

          4.   

          5. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  

          6. import org.wuhua.dao.IBaseDao;  

          7.   

          8. public class BaseDao extends  HibernateDaoSupport  

          9. implements IBaseDao {  

          10.   

          11.     public void delete(Object o) {  

          12.          this.getHibernateTemplate().delete(o);        

          13.     }  

          14.   

          15.     public Collection list() {  

          16.        

          17.         return null;  

          18.     }  

          19.   

          20.     public Object save(Object o) {  

          21.         return this.getHibernateTemplate().save(o);  

          22.             

          23.     }  

          24.   

          25.     public Object update(Object o) {  

          26.         this.getHibernateTemplate().update(o);  

          27.         return o;  

          28.     }  

          29.   

          30. }  



          測試代碼

          java 代碼


           


          1. package org.wuhua.dao;  

          2.   

          3. import java.io.Serializable;  

          4.   

          5. import junit.framework.TestCase;  

          6.   

          7. import org.easymock.MockControl;  

          8. import org.easymock.classextension.MockClassControl;  

          9. import org.springframework.orm.hibernate3.HibernateTemplate;  

          10. import org.wuhua.dao.impl.BaseDao;  

          11.   

          12. public class BaseDaoTest extends TestCase {  

          13.   

          14.     MockControl control;  

          15.   

          16.     private HibernateTemplate ht;  

          17.   

          18.     private BaseDao baseDao;  

          19.   

          20.     protected void setUp() throws Exception {  

          21.         control = MockClassControl.createControl(HibernateTemplate.class);  

          22.         ht = (HibernateTemplate) control.getMock();  

          23.         baseDao = new BaseDao();  

          24.         baseDao.setHibernateTemplate(ht);  

          25.     }  

          26.   

          27.     public void testSave() {  

          28.         Object o = new Object();  

          29.         ht.save(o); 


          30.         //這里我是有疑問的。

          31.         //1,為什么HibernateTemplate返回的是Serializable。

          32.         //2,設置的返回植為什么一定要跟調用ht.save(o)一致呢?


          33.         control.setReturnValue(new Wuhua());  

          34.         control.replay();  

          35.         baseDao.save(o);  

          36.         control.verify();  

          37.     }  

          38.       

          39.     public void testUpdate() {  

          40.         Object a = new Object();  

          41.         ht.update(a);  

          42.        

          43.         control.replay();  

          44.         try {  

          45.             baseDao.update(a);  

          46.             fail("Not catch exception!");  

          47.         } catch(Exception e) {  

          48.                

          49.         }  

          50.         control.verify();  

          51.     }  

          52.       

          53.     class Wuhua implements Serializable {}  

          54.   

          55. }  



          上面就是我第一次很認真的測試,有很多不明白的地方


          文章來源: http://wuhua.javaeye.com/blog/37706

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


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


          網站導航:
           
          主站蜘蛛池模板: 东海县| 长沙市| 巴林右旗| 怀安县| 高阳县| 板桥市| 孟州市| 满城县| 凤阳县| 邳州市| 衡阳县| 丹寨县| 古浪县| 禄丰县| 大竹县| 陇南市| 汉源县| 泽库县| 清涧县| 金沙县| 宕昌县| 惠水县| 宝丰县| 合江县| 东阿县| 虎林市| 岳普湖县| 盐源县| 安远县| 凉山| 永胜县| 乌海市| 荃湾区| 团风县| 浪卡子县| 建湖县| 鄢陵县| 富宁县| 三原县| 云林县| 宁陕县|