EasyMock给出了意想不到的结果,预计为1,实际为0

Bla*_*man 3 java junit unit-testing easymock

随着我的模拟到位,我得到错误:

redisDao.someMethod(notNull(), notNull()): expected 1, actual 0
Run Code Online (Sandbox Code Playgroud)

如果我删除了模拟设置,那么在调试模式下进行跟踪时,它将转到方法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
Run Code Online (Sandbox Code Playgroud)

Log*_*gan 8

我认为你的问题是你正在创建一个"严格"的模拟对象,它希望你调用你在expect()中放入的方法.如果您的代码没有执行预期的方法调用,它会为您提供预期的1实际0消息.

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

您还可能需要在期望调用的末尾添加.anytimes(),这样即使没有调用它也没关系.

这个页面有一些很好的解释,甚至有你的错误