Java EasyMock给出了意外的结果,预期为1,实际为0

Java EasyMock给出了意外的结果,预期为1,实际为0,java,unit-testing,junit,easymock,Java,Unit Testing,Junit,Easymock,在mock就绪的情况下,我得到了错误: redisDao.someMethod(notNull(), notNull()): expected 1, actual 0 如果我删除模拟设置,那么在调试模式下跟踪时,它将转到redisDao.someMethod方法,然后失败并出现空指针异常 这对我来说毫无意义,也不知道该如何解决 mockMaker = EasyMock.createStrictControl(); redisDaoMock = mockMaker.createMock(redi

在mock就绪的情况下,我得到了错误:

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
mockMaker=EasyMock.createStrictControl();
redisDaoMock=mockMaker.createMock(redisDao.class);
setRedisDao(redisDaoMock);
expect(redisDaoMock.someMethod(EasyMock.notNull(),EasyMock.notNull()).andReturn(someReturn);
mockMaker.replay();
mockMaker.verify();
get(请求、响应);
//这里的断言

我认为您的问题在于您正在创建一个“严格”的模拟对象,它希望您调用放入expect()中的方法。如果您的代码没有执行预期的方法调用,它将给您预期的1实际0消息

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

您可能还需要在expect调用的末尾添加一个.anytimes(),这样即使它没有被调用,也可以


我不完全确定,但您不应该将replay和verify放在方法调用之后,还是只在方法调用之后进行verify?很好,我认为verify()放在方法调用之后。它验证了您所期望的被调用。@srikanthroids就是这样,谢谢。+1在属于同一个模拟对象的不同方法调用中添加.anytimes()对我起了作用。