路是爬出來的

          我的第一個真正意義上的測試

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

          對嗎?

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

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

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

                 測試的要求:

                 測試對一個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. }  



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



          看下我的實(shí)現(xiàn)吧,采用Spring實(shí)現(xiàn)。

          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,設(shè)置的返回植為什么一定要跟調(diào)用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. }  



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

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 靖西县| 金华市| 莱州市| 报价| 宝兴县| 汪清县| 古丈县| 贵南县| 蒙阴县| 仪陇县| 城口县| 邢台市| 若羌县| 皋兰县| 伊宁市| 巧家县| 芒康县| 尼木县| 汤阴县| 虹口区| 运城市| 同德县| 舞钢市| 平山县| 定陶县| 治县。| 霸州市| 琼海市| 万荣县| 都匀市| 蛟河市| 湘乡市| 荔波县| 宁晋县| 南丰县| 萍乡市| 梁平县| 从化市| 自贡市| 浦北县| 巩义市|