http://www.ltesting.net/html/40/n-161740.html 测试: http://www.ltesting.net/html/92/category-catid-92.html
jMock 框架介绍
总体上来说,jMock 是一个轻量级的模拟对象技术的实现。
它具有以下特点: 可以用简单易行的方法定义模拟对象,无需破坏本来的代码结构表;
可以定义对象之间的交互,从而增强测试的稳定性;可以集成到测试框架;易扩充;
与大多数 MOCK 框架一样,我们可以在 IDE 中使用并进行开发。
下载 jMock 在 jMock 官方网站,我们可以下载当前稳定版本 jMock2.5.1 。
配置类路径 为了使用 jMock 2.5.1,您需要加入下面的 JAR 文件到当前的类路径。
jmock-2.5.1.jar
hamcrest-core-1.1.jar
hamcrest-library-1.1.jar
图 1.
已添加到 TestingExample 项目中 jMock 的 JAR 文件 使用 jMock 模拟接口 我们首先必须引入 jMock 的类,定义我们的测试类,创建一个 Mockery 的对象用来代表上下文。上下文可以模拟出对象和对象的输出,并且还可以检测应用是否合法。
import org.jmock.Mockery;
import org.jmock.Expectations;
public class AJmockTestCase {
Mockery context = new Mockery();
}
然后我们创建一个 calcService 去模拟 ICalculatorService 接口。
在这里我们以 add() 方法为例,我们针对 add() 方法定义预期值
assumedResult 。
之后我们去调用 add(1,1) 时,就可以得到预期值。
// set up final
ICalculatorService calcService = context.mock(ICalculatorService.class);
final int assumedResult = 2;
// expectations
context.checking(new Expectations() {
{
oneOf (calcService).add(1, 1);
will(returnValue(assumedResult)); }});
清单 3 和 4 分别显示了 ICalculatorService 和 AJmockTestCase 的代码。
清单 3. ICalculatorService 代码
public interface ICalculatorService {
public int add(int a, int b);
}
清单 4.
AJmockTestCase 代码
import org.jmock.Mockery;
import org.jmock.Expectations;
public class AJmockTestCase {
Mockery context = new Mockery();
public void testCalcService() {
// set up final
ICalculatorService calcService = context .mock (ICalculatorService.class);
final int assumedResult = 2;
// expectations context.checking(new Expectations() {
{
oneOf(calcService).add(1, 1);
will(returnValue(assumedResult));
}
});
System.out.println(calcService.add(1, 1));
} }
在 jMock 中,开发人员可以按照下面的语法定义预期值,从而实现更复杂的应用。
例如我们可以模拟底层驱动程序的输出,在上层应用程序中使用这些模拟数据。具体可以参考 jMock 的官方网站。
invocation-count (mock-object).method(argument-constraints); inSequence(sequence-name);
when(state-machine.is(state-name));
will(action);
then(state-machine.is(new-state-name));
----------------------------------------------------------------------
回页首 EasyMock 框架介绍 在实际开发中,不少开发人员也使用 EasyMock 来进行测试驱动开发。
EasyMock 具有以下的特点 在运行时 (runtime) 改变方法名或参数顺序,测试代码不会破坏;
支持返回值和异常;
对于一个或多个虚拟对象,支持检查方法调用次序;
只支持 Java 5.0 及以上版本;
与大多数 MOCK 框架一样,我们可以在 IDE 中使用并进行开发。
下载 EasyMock 在 EasyMock 官方网站,我们可以下载当前稳定版本
EasyMock2.4 。
配置类路径 为了使用 EasyMock 2.4,
您需要加入下面的 JAR 文件到当前的类路径。 easymock.jar
图 2.
已添加到 TestEasyMock 项目中 EasyMock 的 JAR 文件 使用 EasyMock 模拟接口
清单 5.
ILEDCard 代码
public interface ILEDCard { String getMessage(); void setMessage(String message); }
清单 6. LED 代码
public class LED { private ILEDCard ledCard; public LED(ILEDCard ledCard) { this.ledCard = ledCard; } public String ShowMesage() { return this.ledCard.getMessage(); } public void setMessage(String message) { this.ledCard.setMessage(message); } } 我们首先创建一个 Mock 的对象 mockLEDCard 来代表 LED 卡的行为,并初始化 LED 对象。 protected void setUp() throws Exception { super.setUp(); mockLEDCard = createMock(ILEDCard.class); led = new LED(mockLEDCard); } 之后我们对 ShowMessage 方法进行测试。 public void testGetWord() { expect(mockLEDCard.getMessage()).andReturn("This is a EasyMock Test!"); replay(mockLEDCard); led.ShowMesage(); verify(mockLEDCard); } 清单 7 显示了完整的代码。 清单 7. AEasyMockTestCase 代码 import static org.easymock.EasyMock.*; import junit.framework.TestCase; public class AEasyMockTestCase extends TestCase { private LED led; private ILEDCard mockLEDCard; protected void setUp() throws Exception { super.setUp(); mockLEDCard = createMock(ILEDCard.class); led = new LED(mockLEDCard); } protected void tearDown() throws Exception { super.tearDown(); } public void testGetWord() { expect(mockLEDCard.getMessage()).andReturn("This is a EasyMock Test!"); replay(mockLEDCard); led.ShowMesage(); verify(mockLEDCard); } public void testSetWord() { mockLEDCard.setMessage("Another test"); replay(mockLEDCard); led.setMessage("Another test"); verify(mockLEDCard); } }
通过上文对 jMock 和 EasyMock 的介绍,我们可以发现 jMock 可以灵活的定义对象的行为。例如 mock.expects(once()).method("method2").with( same(b1), ANYTHING ).will(returnValue(method2Result)); 这点在 EasyMock 里比较难于实现。
分享到:
相关推荐
mock测试实战
mock练习
服务端Mock测试
支持http接口自由mock,可根据需要进行接口mock测试。
iview.test测试demo包含拖拽排序 mock测试 iview模板...
Mock测试是一种测试思想,那就是通过模拟的手段提高模块的可测试性。测试性不强的模块是软件工程质量的大敌。 本资源位mock测试的简介及简单示例,使用android mock objects实现了模拟android MediaStore的功能。
Squaretest半自动生成Mock测试
[测试开发技术] 我们用到的3种Mock测试方案.docx
基于微服务或者SOA的自动化测试系统每个公司都有自己的特有的,我今天就主要介绍一下,我们研发的一套mock测试系统。我公司目前用的是基于Dubbo的微服务改造,服务之间的调用链路冗长,每个服务又是单独的团队在维护...
go-mock是专门为go语言开发的mock库,该库使用方式简单,支持自动生成代码,这篇文章主要介绍了用gomock进行mock测试的方法示例,感兴趣的小伙伴们可以参考一下
主要介绍了详解Spring MVC如何测试Controller(使用springmvc mock测试),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
在java web应用中,进行用例实现时,很多情况难以模拟,比如数据库用例,如果直接通过连接数据库进行测试,导致用例对环境依赖很大,这时,可以通过mock技术可以模拟构造数据环境,从而进行单元测试,这里提供有实现...
这篇文章主要介绍了postman和python mock测试过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1、python中的mock测试 1)、安装mock第三方库:pip ...
在window或者linux上,模拟一个mock接口,可以实现等同的接口效果,本人测试过
mock总所周知是模拟的意思,我们在做接口测试的时候有时候会发现部分功能依赖其他业务场景或者第三方功能或者是线上数据或者业务场景过于复杂(需要大量调用)的情况,没有办法通过接口调用或者做断言,这个时候就需要...
很有用的C++单元测试工具,附使用教程,如何编译Google Mock和Google Test,环境搭建编写测试用例
Mock模拟测试,定义、好处、关键点、Mockito使用、Mock 对象的行为验证、Spy 对象验证等
在接口测试中如何使用Mock测试? 13. 接口测试中如何进行关联测试? 14. 如何在接口测试中设置环境变量? 15. 如何在接口测试中使用参数化? 16. 如何在接口测试中使用HTTP请求默认值? 17. 如何在接口测试中使用...