远程服务接口
public interface RemoteService {
public BaseResult findMemberById(Query query);
public String addMethod();
}
返回值封装对象
public class BaseResult {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
服务类
public class RealService {
private RemoteService remoteService;
public void doExecute(String memberId) {
BaseResult apple = null;
Query query = new Query(memberId);
apple = getRemoteService().findMemberById(query);
System.out.println(apple);
}
public RemoteService getRemoteService() {
return remoteService;
}
public void setRemoteService(RemoteService remoteService) {
this.remoteService = remoteService;
}
}
jmock模拟测试
public class RealServiceTest extends TestCase {
private RealService service = new RealService();
@Test
public void testDoExecute() {
Mockery context = new Mockery();
final RemoteService remoteService = context.mock(RemoteService.class);
final BaseResult result = new BaseResult();
final Query query = new Query("test");
result.setName("apple");
context.checking(new Expectations() {
{
oneOf(remoteService).findMemberById(query);
will(returnValue(result));
}
});
service.setRemoteService(remoteService);
service.doExecute("test120");
context.assertIsSatisfied();
}
}
运行报错:
写道
unexpected invocation: morganService.findMemberById(<com.jmockTest.Query@14a8cd1>)
expectations:
expected once, never invoked: morganService.findMemberById(<com.jmockTest.Query@e0b6f5>)
parameter 0 did not match: <com.jmockTest.Query@e0b6f5>, because was <com.jmockTest.Query@14a8cd1>; returns <name apple price 0.0 info null>
what happened before this: nothing!
…………
…………
观察错误:
com.jmockTest.Query@14a8cd1
com.jmockTest.Query@e0b6f5
有两个Query对象的引用,说明一个问题:Query 这个类被new了两次,RealServiceTest 这个类中new了一次,而RealService 中也new了一次。
jmock使用的代理机制,运行测试类时,参数值不一致,出错。
解决方案:http://www.jmock.org/cheat-sheet.html
有一句话:
To define looser constraints, specify all arguments as matchers within with clauses:
allowing (calculator).add(with(any(int.class)), with(any(int.class)));
使用: oneOf(remoteService).findMemberById(with(any(Query.class))); 这句解决问题。
分享到:
相关推荐
JMock 是一个Java平台上的单元测试框架,专门用于模拟对象,以便在测试过程中控制和验证对象的行为。它基于EasyMock库,但提供了更强大的功能,尤其是对于处理复杂交互和顺序的场景。JMock使得开发者可以在不依赖...
JMock 是一个流行的开源测试框架,专为Java开发者设计,用于模拟对象的行为,特别是在单元测试中。它允许程序员在不依赖真实对象的情况下测试代码,提高了测试的效率和隔离性。这篇详尽的讨论将深入JMock的核心概念...
**Jmock2.6 Jar包**是Java编程领域中用于单元测试的重要库,它提供了模拟对象的功能,使得开发者能够在测试代码时对复杂依赖关系进行控制和隔离。在本文中,我们将深入探讨Jmock2.6的核心特性、使用场景以及如何在...
通过《JMock Cookbook》的学习,开发者可以了解到如何在实际项目中有效地利用JMock进行测试驱动开发(TDD)和行为驱动开发(BDD),提高代码质量,减少回归错误,并提升开发效率。这本书详细讲解了各种场景下的最佳实践...
JMock是一个开源的Java库,它允许开发者在测试中创建和控制对象的行为。通过模拟对象,我们可以隔离被测试代码,专注于测试单个组件的功能,而无需担心其他部分的影响。JMock使用Java语言本身编写,因此与其他Java...
jMock,作为Java平台上的一个开源模拟框架,为开发者提供了一种高效、灵活的方式来创建和控制对象的行为,以便在测试中隔离复杂的依赖关系。jMock 2.5.1是该框架的一个版本,它在前一版本的基础上进行了优化和改进,...
`jmock`是Java平台上的一个模拟框架,它允许开发者在单元测试中创建和控制对象的行为,以便能够隔离测试并精确地指定期望的交互。下面我们将深入探讨`jmock`的关键概念和功能。 ### 1. 模拟框架概述 `jmock`属于...
jMock与jUnit的集成非常紧密,通常我们会在jUnit测试类中使用jMock来模拟对象。以下是一个简单的示例: ```java import static org.jmock.Expectations.*; import org.junit.Test; import org.jmock.Mockery; ...
这个压缩包中的两个主要文件——jmock-core-1.2.0.jar和jmock-cglib-1.2.0.jar,是进行JMock测试时所必需的组件。 首先,我们来看jmock-core-1.2.0.jar。这是JMock的核心库,提供了模拟对象的基本功能。它包括了...
在 JUnit 中,你可以使用 `jmock-junit3` 或 `jmock-junit4` 包,它们提供了一个 JUnit Rule,使得在测试类中使用 JMock 更加方便。 6. **版本信息** 这个压缩包中的 "jmock-1.2.0-jars" 提供的是 JMock 1.2.0 ...
JMock是一个强大的模拟框架,它允许开发者创建和控制模拟对象,这些对象可以在测试中替代真实的对象,从而减少对实际环境的依赖。JMock 2.5.1版本提供了更多的功能和改进,比如: 1. **模拟接口和类**:JMock不仅...
`jmock-2.6.0-RC2-jars.zip`和`jmock-2.5.1-jars.zip`则包含了相应的库文件,可以直接在项目中引用。 **j-testng-sample.zip 和 jtester-0.8.2.zip** `j-testng-sample.zip`可能是一个包含`TestNG`测试框架示例的...
标题 "maven+jmock" 暗示了我们要讨论的是如何在 Maven 项目中使用 JMock 进行单元测试。Maven 是一个流行的构建自动化工具,用于管理项目的构建、依赖和文档,而 JMock 是一个 Java 代码模拟库,允许开发者在测试中...
JMock是一个用于创建和验证对象行为的模拟框架,它允许开发者在测试中模拟对象的行为,而不是依赖于真实的对象。在单元测试中,我们通常希望隔离被测试的代码,避免外部依赖对测试结果的影响。JMock就是为此目的而...
在 JMock 中,如果我们要模拟一个没有接口的类,可以使用 CGLIB 来创建该类的子类。首先,你需要在项目中引入 CGLIB 的依赖,这里提供的 `cglib-full-2.0.jar` 和 `jmock-cglib-1.0.1.jar` 文件包含了 CGLIB 的相关...
Maven-Central / jmock / jmock-cglib 1.2.0 Maven-Central / org.apache.activemq / activemq-ra 5.2.05.1.0 Maven-Central / org.apache.maven.shared / maven-dependency-tree 1.21.1 Maven-Central / org.apache...
在JMOCK-2.6.0版本中,我们看到了这一功能的进一步优化和增强。 首先,让我们了解一下JMOCK是如何工作的。JMOCK基于Mockery API,这是一个简洁且直观的接口,允许开发者声明预期的方法调用和它们的结果。比如,你...