前段日子很无聊,也是很无奈的。经过了这段日子的,我想了很多事情,虽然全部想通,但却努力的去想了。我想这样就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. }