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

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

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

    路是爬出來的

    單元測試之實(shí)踐二,關(guān)于DAO的測試

           前陣子發(fā)表過 我的第一個真正意義上的測試

    里面對于測試Service大家是沒有意義的,對于測試DAO層則表現(xiàn)各有各的看法。

    比如

    robbin     大哥建議:


    測試DAO不如連數(shù)據(jù)庫一起測試吧。因?yàn)镈AO測試的目的不是DAO接口實(shí)現(xiàn)對不對,而是測試是否如你預(yù)期的發(fā)送了SQL,如你預(yù)期的返回了結(jié)果集。這個時候你Mock之后,測試就沒有意義了。



    hyysguyang      大哥建議:篇

    wuhua 寫道

    分層的原因很多。這里我的看法片面就不說了

    但對于mock來說是有莫大好處的。

    比如service測試的時候完全可以做到隔離數(shù)據(jù)庫,

    我現(xiàn)在的意思是,

    居然Service可以隔離Dao層,也就是說Dao層也是可以做到隔離相關(guān)的數(shù)據(jù)實(shí)現(xiàn)的。也是可以mock一個對象。而并非用實(shí)際的連接去代 替。如果我們的邏輯沒出錯的話,測試就算通過了,至于數(shù)據(jù)層的檢測,那就不關(guān)我們的事情了,比如Hibernate由Hibernate去test, Spring由Spring去Test,Oracle由它自己去做。干自己的事情,別趟其他渾水。這樣不是瀟灑很多嗎



    但是數(shù)據(jù)庫的測試畢竟比較特殊,記住測試的目的是確保你的代碼質(zhì)量,如果你確定你的這樣測就沒問題了,那無話可說,否則就盡量多的測試。

    事實(shí)上,最原始的單元測試(plain testcase)就是用來測方法,測業(yè)務(wù)邏輯的,如果有邏輯就測,沒邏輯就不用測了,同樣的道理,相信你不會去測一個bean的get/set方法吧。

    記住你測試的目的和動機(jī),如果你認(rèn)為測試dao層是為了測你的邏輯(你確定你的dao的實(shí)現(xiàn)代碼是否真的存在邏輯),那你就mock吧,但是,我 們更相信,我們測DAO層,更應(yīng)該是測訪問數(shù)據(jù)庫的情況,你如連接,sql是否正確,sequence是否正確等,而這些你必須要真正的連接數(shù)據(jù)庫,也因 此,我們一般都是直接訪問數(shù)據(jù)庫來測試的,當(dāng)然,如果可能你可以采用內(nèi)存庫。

    事實(shí)上,我們對dao的測試,一般都進(jìn)行所謂的的集成單元測試。我認(rèn)為,你應(yīng)該確定好你的測試策略,然后在去采用相應(yīng)的測試方法。我在目前的開發(fā)中就是采用這樣的方式測的。


    上面兩個大哥都建議測試DAO的時候還是連接數(shù)據(jù)庫為好。

    但個人認(rèn)為上面兩個大哥的單元測試以非純正的單元測試了,而是集成單元測試。

    其實(shí)說白了,測試這東西只是為了項(xiàng)目更好,更快的完成。至于是否要求純單元,或者是集成單元測試,則看各位的需要,如果覺得集成單元測試對項(xiàng)目有幫助,那就用吧,現(xiàn)在發(fā)現(xiàn)對這個已經(jīng)沒有明顯的界限了。





    不理會它了,現(xiàn)在回歸到我們用戶注冊的例子。

    java 代碼


     


    1. 1public interface IAccountDao extends IBaseDao {    

    2. 2.     public Account findAccountById(String id);    

    3. 3.     public Account findAccounByName(String name);    

    4. 4. }   





    實(shí)際實(shí)現(xiàn)代碼

    java 代碼


     


    1. package org.wuhua.dao.impl;  

    2.   

    3. import java.util.List;  

    4.   

    5. import org.wuhua.dao.IAccountDao;  

    6. import org.wuhua.model.Account;  

    7.   

    8. public class AccountDao extends BaseDao implements IAccountDao {  

    9.   public Account findAccountById(String id) {  

    10.         return (Account) this.getHibernateTemplate().get(Account.class, id) ;  

    11.     }  

    12.   

    13.     public Account findAccounByName(String name) {  

    14.         List l = this.getHibernateTemplate().find("from Account as a where a.name=?", name);  

    15.         if(l != null && l.size() >=1)  

    16.             return (Account) l.get(0);  

    17.         else   

    18.             return null;  

    19.     }  

    20. }  





    java 代碼


     


    1. package org.wuhua.dao;  

    2.   

    3. import java.util.ArrayList;  

    4. import java.util.List;  

    5.   

    6. import junit.framework.Assert;  

    7. import junit.framework.TestCase;  

    8.   

    9. import org.easymock.MockControl;  

    10. import org.easymock.classextension.MockClassControl;  

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

    12. import org.wuhua.dao.impl.AccountDao;  

    13. import org.wuhua.model.Account;  

    14.   

    15.    

    16.   

    17. public class AccountDaoTest extends TestCase {  

    18.       

    19.     private AccountDao accountDao;  

    20.     private org.springframework.orm.hibernate3.HibernateTemplate ht;  

    21.     private MockControl control;  

    22.   

    23.     protected void setUp() throws Exception {  

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

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

    26.         accountDao = new AccountDao();  

    27.         accountDao.setHibernateTemplate(ht);  

    28.     }  

    29.   

    30.     protected void tearDown() throws Exception {  

    31.            

    32.     }  

    33.       

    34.     public void testFindAccountById(){  

    35.         Account a = new Account("wuhua");  

    36.         a.setId("10");     

    37.           

    38.         ht.get(Account.class, a.getId());  

    39.           

    40.         control.setReturnValue(a);  

    41.           

    42.         control.replay();  

    43.           

    44.         Account result =   accountDao.findAccountById(a.getId());  

    45.           

    46.         assertNotNull(result);  

    47.   

    48.         Assert.assertEquals(a.getId(),result.getId());  

    49.         Assert.assertEquals(a, result);  

    50.           

    51.         control.verify();  

    52.           

    53.     }  

    54.       

    55.     public void testFindAccountByName(){  

    56.         Account a = new Account("wuhua");      

    57.            

    58.         ht.find("from Account as a where a.name=?", a.getName());  

    59.         List l = new ArrayList();  

    60.         l.add(a);  

    61.         control.setReturnValue(l);  

    62.           

    63.         control.replay();  

    64.           

    65.         Account result =  accountDao.findAccounByName(a.getName());  

    66.   

    67.         Assert.assertEquals(a.getId(),result.getId());  

    68.         Assert.assertEquals(a, result);  

    69.           

    70.         control.verify();  

    71.           

    72.     }  

    73. }  


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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品老司机在线观看| 亚洲最大av无码网址| 日本成年免费网站| 最近中文字幕免费mv视频7| 日本久久久免费高清| 亚洲精品无码av天堂| 看一级毛片免费观看视频| 久久av免费天堂小草播放| 精品久久久久成人码免费动漫| 亚洲视频小说图片| 国产AV无码专区亚洲AV蜜芽| 国产免费一区二区三区不卡| 久久精品免费一区二区喷潮| 亚洲高清视频一视频二视频三| 亚洲精品乱码久久久久久下载| 亚洲精品国产日韩无码AV永久免费网| 99久久99这里只有免费费精品| 一区国严二区亚洲三区| 亚洲欧洲自拍拍偷午夜色| 免费影院未满十八勿进网站| 亚洲日韩精品无码专区加勒比☆| av永久免费网站在线观看 | 日韩黄色免费观看| 国内成人精品亚洲日本语音| 国产成人亚洲精品影院| 日韩精品久久久久久免费| 无码不卡亚洲成?人片| 中文在线观看国语高清免费| 免费观看四虎精品国产永久| 综合自拍亚洲综合图不卡区| 免费无码又爽又刺激聊天APP| 小说专区亚洲春色校园| 亚洲午夜久久久久妓女影院 | 亚洲成色在线影院| 四虎精品成人免费视频| 午夜视频在线在免费| 亚洲午夜无码久久久久软件| 一个人免费观看在线视频www| 久久丫精品国产亚洲av| 8x网站免费入口在线观看| 亚洲av永久无码精品网站|