2012-01-05 39 views
3

与我的地方嘲笑,我得到的错误:EasyMock的给予意想不到的结果,称预计1,实际0

redisDao.someMethod(notNull(), notNull()): expected 1, actual 0 

如果我在调试模式跟踪时要取出模拟设置,那么,它进入方法redisDao.someMethod,然后以空指针异常失败。

这对我没有意义,不知道如何解决这个问题?

mockMaker = EasyMock.createStrictControl(); 
redisDaoMock = mockMaker.createMock(redisDao.class); 

userService.setRedisDao(redisDaoMock); 

expect(redisDaoMock.someMethod(EasyMock.<String>notNull(), EasyMock.<String>notNull())).andReturn(someReturn); 

mockMaker.replay(); 
mockMaker.verify(); 

userController.get(request, response); 

// assertions here 
+3

我不能完全肯定,但不应该你把回放和验证或验证只是在方法调用之后? – 2012-01-05 04:43:22

+0

好,我认为在方法调用后,verify()会继续。它验证你所期望的是被调用的。 – Logan 2012-01-05 04:50:15

+0

@srikanthradix这是它的感谢。 – Blankman 2012-01-06 03:04:05

回答

7

我觉得你的问题是,你正在创建一个“严”模拟对象,并期望你叫你把方法的期望()。如果你的代码没有执行预期的方法调用,它会给你预期的1个实际的0消息。

您可以使用EasyMock.createNiceMock()而不是createStrictControl,这应该消失。或者只是确保你的代码调用你在Expect调用中告诉它的方法。

您可能还需要在期望的调用结束时添加一个.anytimes(),以便即使未调用它,也可以。

This page has some good explanations and even has your error

+1

+1在不同的方法调用中添加.anytimes()属于同一个模拟对象,这对我来说并不适用。 – user1563633 2013-12-03 11:14:59

相关问题