一个测试,测试两个动作见
*1,*2public void testVoteCheck() throws Exception {
//
*1 测试找不到结果,返回true mockVoteDao.getVote("192.168", 1);
EasyMock.expectLastCall().andReturn(null);
EasyMock.replay(mockVoteDao);
boolean result = voteService.voteCheck(vote);
assertTrue(result);
//
*2 测试找到结果但小于半小时 mockVoteDao.getVote("192.168", 1); //xxxxxxxx EasyMock.expectLastCall().andReturn(vote);
EasyMock.replay(mockVoteDao);
boolean result = voteService.voteCheck(vote);
assertFalse(result);
}
结果报错
java.lang.AssertionError:
Unexpected method call getVote("192.168", 1):
getVote("192.168", 1): expected: 1, actual: 1 (+1)
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:29)
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:45)
在运行完
//xxxxxxxx行就出错了意思是说预计mockVoteDao.getVote("192.168", 1);只调用一次,结果调用了两次,
也就是说一旦一个mock对象被激活,并且没有被设定调用多次的话,会抛错
但如果用以下方式就没错
/**
* 测试保存投票前的检查
*
* @author weip
* @time 2006-5-12 12:10:00
* @throws Exception a
*/
public void testVoteCheck() throws Exception {
// 测试找不到结果,返回true
mockVoteDao.getVote("192.168", 1);
EasyMock.expectLastCall().andReturn(null);
EasyMock.replay(mockVoteDao);
boolean result = voteService.voteCheck(vote);
assertTrue(result);
}
/**
* 测试找到结果但小于半小时
* @author weip
* @time 2006-5-12 15:16:23
* @throws Exception a
*/
public void testVoteCheck2() throws Exception {
mockVoteDao.getVote("192.168", 1);
EasyMock.expectLastCall().andReturn(vote);
EasyMock.replay(mockVoteDao);
boolean result = voteService.voteCheck(vote);
assertFalse(result);
}
即将一个方法拆成两个就没错,因为这个时候两个测试中mockVoteDao是不同的对象
分享到:
相关推荐
可以针对任何用途配置这些 mock,从方法签名中的简单哑参数到检验一系列方法调用的多调用测试。 例如,假设我们有一个 ExchangeRate 接口,它用于获取汇率数据。我们可以使用 EasyMock 来创建一个 mock 的 Exchange...
如果调用次数或参数不匹配,EasyMock将抛出异常,表明测试失败。 EasyMock与其他模拟框架如Mockito相比,更注重预定义行为,而Mockito则更倾向于使用“行为验证”和“记录-重放”模式。尽管如此,EasyMock依然在很...
- **预期**:EasyMock允许设置预期,即预先定义模拟对象如何响应特定的方法调用,包括方法的参数、返回值以及调用次数。 **2. EasyMock的使用** - **创建模拟对象**:你可以使用`EasyMock.createMock()`方法创建一...
验证功能:EasyMock 提供了一些方法来验证模拟对象的行为,例如检查方法调用次数、顺序等。 灵活性:EasyMock 允许用户自定义模拟对象的返回值,或者抛出异常等,使得测试更加灵活。 使用 EasyMock 进行单元测试的...
EasyMock 是一个强大的Java模拟框架,它允许开发者在单元测试中创建和控制对象的...在实际开发中,利用EasyMock进行单元测试,能够有效地提升代码质量,减少因为依赖问题导致的错误,从而提升软件的稳定性和可靠性。
测试结束后,EasyMock会验证代理对象的调用是否符合预设,如果不符合,就会抛出一个期望未满足的错误。 【EasyMock使用方法】 1. **创建模拟对象**:首先,需要通过`EasyMock.createMock()`方法创建模拟对象,指定...
它提供对接口的模拟,能够通过录制、回播放三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。通过 EasyMock,我们可以方便的构造 Mock 对象从而使单元...
在 EasyMock 中,你可以通过扩展 `EasyMock` 类或使用 `createMock()` 方法来创建 mock 对象。例如,如果你有一个名为 `MyService` 的接口,你可以这样创建它的 mock 实例: ```java MyService myServiceMock = ...
Easymock Class Extension库解决了这个问题,使你可以创建模拟这些方法的对象,从而在测试中控制它们的行为。 使用Easymock进行单元测试时,你通常需要以下步骤: 1. **导入库**:在你的测试类中,你需要引入...
在`testAddAndChangeDocument`方法中,我们展示了如何设置方法的调用次数。通过`expectLastCall().times(3)`,我们指定了`mock.documentChanged`方法应该被调用三次。而在`testVoteForRemoval`方法中,我们则演示了...
而期望则是定义模拟对象应该如何被调用,例如,指定哪个方法会被调用,调用的次数,以及调用时的参数等。 使用Easymock进行单元测试的步骤大致如下: 1. **创建模拟对象**:使用Easymock的`createMock()`方法,...
- **动态修改行为**:通过在测试中多次调用`when()`方法,可以在不同的调用之间改变方法的行为。 ##### 1.15 自定义参数匹配器 - **自定义匹配器**:Easymock提供了默认的参数匹配机制,但在某些情况下可能需要更...
* 使用easymock的anyTimes方法可以放宽调用次数的限制。 ### 参数匹配 * 使用easymock的eq方法可以匹配参数的值。 ### Partial Class Mocking * Partial Class Mocking:是指模拟类的部分方法。 * 使用easymock...
3. **期望设定**:你可以设置对模拟对象方法调用的期望,比如期望某个方法在测试期间被调用的次数,或者在特定顺序下被调用。 4. **验证**:在测试结束时,EasyMock会验证模拟对象的行为是否符合预设的期望,如果不...
6. **回调(Callback)**:EasyMock还支持在模拟对象的方法被调用时执行自定义代码,通过`expectLastCall().doSomething()`。 7. **静态方法模拟**:虽然EasyMock主要针对实例方法的模拟,但它也提供扩展机制(如...
- **期望顺序(Ordering)**:可以设置方法调用的顺序,确保在测试中方法的调用顺序正确。 ### EasyMock与Mockito的比较 Mockito是另一款流行的模拟框架,它在易用性和功能上有所增强,如更简洁的API、更强大的...
当在测试过程中一些复杂的对象生成相当麻烦、费时或者根本无法生成时,可以用模拟的对象来代替真实的对象。 EasyMock 可以 mock 接口和 java 类,但是 class mocking 有一些限制: 不能 mock 类的 final 方法。如果 ...