0

结果我遇到了使用问题assertThat(object.method(new SomeClass(someParam))),比较是在实际运行测试时,匹配器正在比较对象引用而不是对象的内容,因为equals方法没有被覆盖。

我不想执行以下操作来解决问题

  • 模拟构造函数,因为我想使用实际调用该方法的真实对象
  • assertThat(object.method(any(SomeClass.class)))因为它放松了测试和参数someParam很重要。

是否有一个解决方案可以执行以下操作?

  • assertThat(object.method(any(SomeClass.class, someParam)))它将匹配调用它的两个对象与传递参数的特定构造函数。
4

2 回答 2

1

模拟构造函数,因为我想使用实际调用该方法的真实对象

这是错误的做法。

更好的方法是重构您的生产代码以使用依赖注入关注点分离和其他 OO 原则。然后很容易object模拟替换并使用verify(object).method(eq(parameter));

于 2017-03-23T19:11:50.957 回答
1

你可以编写自己的匹配器,我通常扩展 mockito 的 ArgumentMatcher...

于 2017-03-23T13:13:50.233 回答