【问题标题】:Mockito complains about wrong argumentsMockito 抱怨错误的论点
【发布时间】:2010-11-24 11:54:24
【问题描述】:

我们尝试使用 Mockito 验证操作的行为。测试代码是这样的

final Type1 mock = mock(Type1.class);
new SomeAction<Type1>(mock).actionPerformed(null);

verify(mock).someMethod();

方法actionPerformed 仅包含对Type1 构造函数中提供的对象的someMethod 调用。然而 Mockito 抱怨没有发生预期的方法调用,而是发生了不同的方法调用。但是 Mockito 打印的两个调用的 String 表示是完全一样的!

有什么解释吗?

更新:来自 Mockito 的错误消息

Argument(s) are different! Wanted:
type1.someMethod();
-> at xxx
Actual invocation has different arguments:
type1.someMethod();
-> at xxx

【问题讨论】:

  • 我试过了,它的工作方式符合您的预期(验证通过。)您使用的是什么版本的 Mockito?我在1.8。您确定您的 null 参数不会导致采用不同的分支吗?
  • 版本为1.8.5; someMethod 是一个单一的,所以真的没有不同的部分。
  • 您能提供一个SSCCE吗?
  • 刚刚用 1.8.5 版试了一下,这一切都通过了。你正在做的事情一定是不同的。
  • 你确定你对这些方法没有参数吗?具有相同字符串表示的参数?

标签: java testing mockito verify


【解决方案1】:

这有点牵强,但请检查您的 toString 实现。我遇到了一些令人讨厌的单元测试场景,从单元测试的角度来看,预期和观察到的似乎是相同的,而实际上它们是不同的。最后,是 toString 的一个变体让我相信有相似之处,而实际上没有。

【讨论】:

  • 由于该方法返回 void 并且不接受参数,因此不涉及任何 toString ...我认为。
  • 单元测试结果中显示的 toString() 表示欺骗了我一次。为了弄清楚 Mockito 抱怨的 2 个对象是否不同,我再次覆盖了 toString,因为它在 Object 中。
猜你喜欢
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 2023-01-16
  • 2014-08-12
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
相关资源
最近更新 更多