因为尝试使用TDD开发,要写TestCase,当然不可能不用mock object 。为了学写mock object,在摆渡和狗狗上找写资料,搜到了两个mock library项目,一个是EasyMock,一个是JMock。没时间细看,又找了篇对比文章《MockObjects的选择:EasyMock与JMock的比较》http://www.landiy.net/ttzy/study/jsp/jspbase/20040825193929.html 最后与作者一样,选择了jmock。jmock的缺点是还不支持 具体类可有构造参数,但我使用的是Spring,不是Pico ,所以对这个要求不高,而其他功能还是jmock全一些,还是决定使用它。最基本的使用方法如下:
import org.jmock.Mock;
import org.jmock.MockObjectTestCase
public class JMockUsage extends MockObjectTestCase {
public void testReturnValueWithParemeter(){
//
构造
Mock
控制器
Mock m = new Mock(TheInterfaceToMock.class);
//
这是要测试
MockObject
TheInterfaceToMock mock = (TheInterfaceToMock) m.proxy();
//
期待的返回值
SampleReturn sr = new SampleReturnImpl();
//
期待的参数
Parameter p = new ParameterImpl();
//
控制器,期待一次,方法
sampleMethod
,参数等于
p(equals)
,将返回
sr
m.expects(once()).method("sampleMethod")
.with(eq(p)).will(returnValue(sr));
//
正式执行
mockobject
SampleReturn ret = mock.sampleMethod(new ParameterImpl());
//
确定返回值是相同的
assertSame(sr,ret);
}
}