前段日子很無(wú)聊,也是很無(wú)奈的。經(jīng)過(guò)了這段日子的,我想了很多事情,雖然全部想通,但卻努力的去想了。我想這樣就Ok了
對(duì)嗎?
好了。前陣子,老板請(qǐng)喝早茶,順便跟我們這些技術(shù)人員討論了怎么樣可以提高我們內(nèi)功的問(wèn)題。我老板也是技術(shù)出身的。有相當(dāng)多的經(jīng)驗(yàn),當(dāng)然我最初的想法并不是去研究測(cè)試,我直接提出:“我覺(jué)得我們應(yīng)該提高我們對(duì)設(shè)計(jì)模式的理解”。他卻不怎么同意,說(shuō)測(cè)試才是我們現(xiàn)在的當(dāng)務(wù)之急,然后很肯定的說(shuō)。TDD,重構(gòu)都是建立再單元測(cè)試基礎(chǔ)上的。并推翻了我的建議:”有空讓對(duì)設(shè)計(jì)模式有深厚理解的員工給我們上課“。
開(kāi)始由于我個(gè)人原因,或許我是個(gè)很情緒話的員工,也許在另外一家公司我可能早就被T。也許老板對(duì)我太好了。^_^
我當(dāng)時(shí)不怎么響應(yīng),總是做自己喜歡做的事情,后來(lái)自己慢慢覺(jué)得自己的工作態(tài)度不對(duì),所以昨天試著努力糾正自己的錯(cuò)誤,真是在這樣的環(huán)境下,自己寫出了自己第一個(gè)我認(rèn)為真正意義上的測(cè)試,把它記錄下來(lái)。
測(cè)試的要求:
測(cè)試對(duì)一個(gè)Account的Dao操作以及Service。
java 代碼
-
- package org.wuhua.dao;
-
- import java.util.Collection;
-
- public interface IBaseDao {
- Object save(Object o);
- void delete(Object o);
- Object update(Object o);
- Collection list();
- }
根據(jù)我的理解,測(cè)試的對(duì)方要跟mock的對(duì)象分開(kāi),(開(kāi)始我一直認(rèn)為你要mock的對(duì)象就是你要測(cè)試的東西,搞著搞著,我就很迷茫了。)。現(xiàn)在要做的就是看你IBaseDao的實(shí)現(xiàn)是什么了。如果實(shí)現(xiàn)是采用SpringHibernateTemplate的話你就去mock一個(gè)這樣對(duì)象,不過(guò)此對(duì)象并不是接口,所以你要用到easymock的擴(kuò)展包,以對(duì)它的支持。如果你實(shí)現(xiàn)的采用純Hibernate的話。那你就去mock一個(gè)SessionFactory吧。很簡(jiǎn)單吧,難道這就是所謂的解耦嗎?我想是的,這正是解耦。 哈哈
看下我的實(shí)現(xiàn)吧,采用Spring實(shí)現(xiàn)。
java 代碼
- package org.wuhua.dao.impl;
-
- import java.util.Collection;
-
- import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
- import org.wuhua.dao.IBaseDao;
-
- public class BaseDao extends HibernateDaoSupport
- implements IBaseDao {
-
- public void delete(Object o) {
- this.getHibernateTemplate().delete(o);
- }
-
- public Collection list() {
-
- return null;
- }
-
- public Object save(Object o) {
- return this.getHibernateTemplate().save(o);
-
- }
-
- public Object update(Object o) {
- this.getHibernateTemplate().update(o);
- return o;
- }
-
- }
測(cè)試代碼
java 代碼
- package org.wuhua.dao;
-
- import java.io.Serializable;
-
- import junit.framework.TestCase;
-
- import org.easymock.MockControl;
- import org.easymock.classextension.MockClassControl;
- import org.springframework.orm.hibernate3.HibernateTemplate;
- import org.wuhua.dao.impl.BaseDao;
-
- public class BaseDaoTest extends TestCase {
-
- MockControl control;
-
- private HibernateTemplate ht;
-
- private BaseDao baseDao;
-
- protected void setUp() throws Exception {
- control = MockClassControl.createControl(HibernateTemplate.class);
- ht = (HibernateTemplate) control.getMock();
- baseDao = new BaseDao();
- baseDao.setHibernateTemplate(ht);
- }
-
- public void testSave() {
- Object o = new Object();
- ht.save(o);
- //這里我是有疑問(wèn)的。
- //1,為什么HibernateTemplate返回的是Serializable。
- //2,設(shè)置的返回植為什么一定要跟調(diào)用ht.save(o)一致呢?
- control.setReturnValue(new Wuhua());
- control.replay();
- baseDao.save(o);
- control.verify();
- }
-
- public void testUpdate() {
- Object a = new Object();
- ht.update(a);
-
- control.replay();
- try {
- baseDao.update(a);
- fail("Not catch exception!");
- } catch(Exception e) {
-
- }
- control.verify();
- }
-
- class Wuhua implements Serializable {}
-
- }
上面就是我第一次很認(rèn)真的測(cè)試,有很多不明白的地方 |