路是爬出來的

          導(dǎo)航

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

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          [導(dǎo)入]我的第一個(gè)真正意義上的測(cè)試

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

          對(duì)嗎?

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

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

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

                 測(cè)試的要求:

                 測(cè)試對(duì)一個(gè)Account的Dao操作以及Service。

          java 代碼


           


          1. //先來測(cè)試最基本的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ù)我的理解,測(cè)試的對(duì)方要跟mock的對(duì)象分開,(開始我一直認(rèn)為你要mock的對(duì)象就是你要測(cè)試的東西,搞著搞著,我就很迷茫了。)。現(xiàn)在要做的就是看你IBaseDao的實(shí)現(xiàn)是什么了。如果實(shí)現(xiàn)是采用SpringHibernateTemplate的話你就去mock一個(gè)這樣對(duì)象,不過此對(duì)象并不是接口,所以你要用到easymock的擴(kuò)展包,以對(duì)它的支持。如果你實(shí)現(xiàn)的采用純Hibernate的話。那你就去mock一個(gè)SessionFactory吧。很簡(jiǎn)單吧,難道這就是所謂的解耦嗎?我想是的,這正是解耦。 哈哈



          看下我的實(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. }  



          測(cè)試代碼

          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)真的測(cè)試,有很多不明白的地方


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

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 疏附县| 吉木乃县| 江安县| 娱乐| 井冈山市| 宁陵县| 太仆寺旗| 治县。| 曲沃县| 隆回县| 易门县| 平乡县| 常州市| 侯马市| 云林县| 赣榆县| 怀远县| 东港市| 陈巴尔虎旗| 南昌县| 怀来县| 怀柔区| 叙永县| 达拉特旗| 台中县| 略阳县| 姜堰市| 屯留县| 台东县| 泗洪县| 铜梁县| 安康市| 睢宁县| 吉安县| 贵州省| 扶风县| 久治县| 二连浩特市| 克山县| 江山市| 山西省|