“jMock利用mock objects思想来对Java code进行测试。jMock具有以下特点:容易扩展,让你快速简单地定义mock objects,因此不必打破程序间的关联,你定义灵活的超越对象之间交互作用而带来测试局限,减少你测试地脆弱性。”
跟JMock功能类似的还有EasyMock。
简单试验后的感觉没有试验DBUnit后的感觉强烈,试了DBUnit的感觉是这东西以后一定要用.
但个人认为mock object这种东西能不用就不用,模拟来模拟去,最后还是要和真东西联调,所以mock的阶段应该是尽可能的短才是.
使用模仿对象进行测试的常用编码样式是:
· 创建模仿对象的实例
· 设置模仿对象中的状态和期望值
· 将模仿对象作为参数来调用域代码
· 验证模仿对象中的一致性
代码中的大概过程:
Mock mock = new Mock(**.class);//构造一个那个类的mock对象,把这个类传入Mock
使用mock.expects方法,来设置想要执行的操作:执行几次、执行哪个方法、传什么参、返回什么值
获得那个mock对象:** x = (**)mock.proxy();//proxy方法返回代理类实例,即虚拟对象实例
然后run **.class的那个方法(call methods on the mock object, expectation on it will deliver the result set up by yourself)
写mock-object 测试,需要有独立的接口作为mock的对象(从而促进了针对接口编程的习惯),还有个好的副作用:他迫使你来重写一些代码。实际上,代码常常写的不好。你让类和环境之间产生了不必要的耦合。