前段日子很无聊,也是很无奈的。经过了这段日子的,我想了很多事情,虽然全部想通,但却努力的去想了。我想这样就Ok了
对吗?
       好了。前阵子,老板请喝早茶,顺便跟我们这些技术人员讨论了怎么样可以提高我们内功的问题。我老板也是技术出身的。有相当多的经验,当然我最初的想法并不是去研究测试,我直接提出:“我觉得我们应该提高我们对设计模式的理解”。他却不怎么同意,说测试才是我们现在的当务之急,然后很肯定的说。TDD,重构都是建立再单元测试基础上的。并推翻了我的建议:”有空让对设计模式有深厚理解的员工给我们上课“。
       开始由于我个人原因,或许我是个很情绪话的员工,也许在另外一家公司我可能早就被T。也许老板对我太好了。^_^
我当时不怎么响应,总是做自己喜欢做的事情,后来自己慢慢觉得自己的工作态度不对,所以昨天试着努力纠正自己的错误,真是在这样的环境下,自己写出了自己第一个我认为真正意义上的测试,把它记录下来。
       测试的要求:
       测试对一个Account的Dao操作以及Service。

java 代码


 

1. //先来测试最基本的dao吧
2. package
3.   
4. import
5.   
6. public interface
7.     Object save(Object o);  
8. void
9.     Object update(Object o);  
10.     Collection list();  
11. }

根据我的理解,测试的对方要跟mock的对象分开,(开始我一直认为你要mock的对象就是你要测试的东西,搞着搞着,我就很迷茫了。)。现在要做的就是看你IBaseDao的实现是什么了。如果实现是采用SpringHibernateTemplate的话你就去mock一个这样对象,不过此对象并不是接口,所以你要用到easymock的扩展包,以对它的支持。如果你实现的采用纯Hibernate的话。那你就去mock一个SessionFactory吧。很简单吧,难道这就是所谓的解耦吗?我想是的,这正是解耦。 哈哈



看下我的实现吧,采用Spring实现。


java 代码


 

1. package
2.   
3. import
4.   
5. import
6. import
7.   
8. public class BaseDao extends
9. implements
10.   
11. public void
12. this.getHibernateTemplate().delete(o);        
13.     }  
14.   
15. public
16.        
17. return null;  
18.     }  
19.   
20. public
21. return this.getHibernateTemplate().save(o);  
22.             
23.     }  
24.   
25. public
26. this.getHibernateTemplate().update(o);  
27. return
28.     }  
29.   
30. }

测试代码


java 代码


 

1. package
2.   
3. import
4.   
5. import
6.   
7. import
8. import
9. import
10. import
11.   
12. public class BaseDaoTest extends
13.   
14.     MockControl control;  
15.   
16. private
17.   
18. private
19.   
20. protected void setUp() throws
21. class);  
22.         ht = (HibernateTemplate) control.getMock();  
23. new
24.         baseDao.setHibernateTemplate(ht);  
25.     }  
26.   
27. public void
28. new
29.         ht.save(o);  
30.         //这里我是有疑问的。
31.         //1,为什么HibernateTemplate返回的是Serializable。
32.         //2,设置的返回植为什么一定要跟调用ht.save(o)一致呢?
33. new
34.         control.replay();  
35.         baseDao.save(o);  
36.         control.verify();  
37.     }  
38.       
39. public void
40. new
41.         ht.update(a);  
42.        
43.         control.replay();  
44. try
45.             baseDao.update(a);  
46. "Not catch exception!");  
47. catch(Exception e) {  
48.                
49.         }  
50.         control.verify();  
51.     }  
52.       
53. class Wuhua implements
54.   
55. }