EasyMock与JMock的比较

发表于:2009-04-01来源:作者:点击数: 标签:JMockEasyMock
本文假设读者已经了解了MockObjects的使用目的和基本方式,不对MockTest之类的技术作过多解释。仅提醒一句:“不要 测试 你的MockObjects”。 本文作为一个评测结果的同时,也可以作为EasyMock和jMock的简短教程。他们本身都很易用,可惜带的示例过于复杂,

本文假设读者已经了解了MockObjects的使用目的和基本方式,不对MockTest之类的技术作过多解释。仅提醒一句:“不要测试你的MockObjects”。

本文作为一个评测结果的同时,也可以作为EasyMock和jMock的简短教程。他们本身都很易用,可惜带的示例过于复杂,都用了过多的模式。看过本文的例子,相信就可以从容的在项目中使用了。

Java中常用的MockObjects有EasyMock和jMock等。其中EasyMock开发较早,已经出了1.1版本,而jMock前几天才刚推出了1.0 final。作为刚成熟的小弟弟,jMock有什么竞争实力呢?

本比较针对于以下几个方面,代码请见附件。

1是否能够对具体类进行模拟(当然,对接口模拟是基本功能)

2是否能够对方法名,参数,返回值进行动态控制

3基本代码行数

4是否能够对具有构造参数的具体类模拟

   现在比较开始了。首先制作若干测试文件,很简单。要模拟的有一个接口和一个具体类,叫做TheInterfaceToMock和TheClassToMock,另外,提供方法SampleReturn sampleMethod(Parameter p);以及同名无参数方法。

   第一个测试是针对TheInterfaceToMock,提供ParameterImpl和SampleReturnImpl作为期待的参数和返回值。

    jMock代码如下:  

publiclearcase/" target="_blank" >cclassJMockUsageextendsMockObjectTestCase{

   publicvoidtestReturnValueWithParemeter(){       

       //构造Mock控制器

       Mockm=newMock(TheInterfaceToMock.class);

       //这是要测试MockObject

       TheInterfaceToMockmock=(TheInterfaceToMock)m.proxy();

       //期待的返回值

       SampleReturnsr=newSampleReturnImpl();

       //期待的参数

       Parameterp=newParameterImpl();

       

       //控制器,期待一次,方法sampleMethod,参数等于p(equals),将返回sr

       m.expects(once()).method("sampleMethod")

.with(eq(p)).will(returnValue(sr));

              

       //正式执行mockobject

       SampleReturnret=mock.sampleMethod(newParameterImpl());

       //确定返回值是相同的

       assertSame(sr,ret);

   }

 

}

 

原文转自:http://www.ltesting.net