【问题标题】:EasyMock giving unexpected results, says expected 1, actual 0EasyMock 给出了意想不到的结果,预期为 1,实际为 0
【发布时间】:2012-01-05 04:05:44
【问题描述】:

有了我的模拟,我得到了错误:

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

【问题讨论】:

  • 我不完全确定,但是你不应该把回放和验证或只是在方法调用之后验证?
  • 很好,我认为 verify() 确实在方法调用之后进行。它验证你所期望的被调用了。
  • @srikanthradix 就是这样,谢谢。

标签: java unit-testing junit easymock


【解决方案1】:

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

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

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

This page has some good explanations and even has your error

【讨论】:

猜你喜欢
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 2019-05-19
相关资源
最近更新 更多