如何使用带有对象参数的`any`匹配器
How to use `any` matcher with parameters to the object
我在使用 assertThat(object.method(new SomeClass(someParam)))
时遇到问题,比较实际上是 运行 测试,匹配器正在比较对象引用而不是对象的内容作为 equals
方法未被覆盖。
我不想做下面的事情来解决问题
- 模拟构造函数,因为我想使用实际调用方法的真实对象
assertThat(object.method(any(SomeClass.class)))
因为它放宽了测试,参数someParam
很重要。
是否有解决方案可以执行以下操作?
assertThat(object.method(any(SomeClass.class, someParam)))
它将匹配调用它的对象与传递参数的特定构造函数。
你可以自己写匹配器,我一般都是扩展mockito的ArgumentMatcher...
Mock constructor since I want to use the real object where the method is actually called
这是错误的做法。
更好的方法是重构您的生产代码以使用依赖注入、关注点分离和其他 OO 原则。然后很容易用 mock 替换 object
并使用 verify(object).method(eq(parameter));
我在使用 assertThat(object.method(new SomeClass(someParam)))
时遇到问题,比较实际上是 运行 测试,匹配器正在比较对象引用而不是对象的内容作为 equals
方法未被覆盖。
我不想做下面的事情来解决问题
- 模拟构造函数,因为我想使用实际调用方法的真实对象
assertThat(object.method(any(SomeClass.class)))
因为它放宽了测试,参数someParam
很重要。
是否有解决方案可以执行以下操作?
assertThat(object.method(any(SomeClass.class, someParam)))
它将匹配调用它的对象与传递参数的特定构造函数。
你可以自己写匹配器,我一般都是扩展mockito的ArgumentMatcher...
Mock constructor since I want to use the real object where the method is actually called
这是错误的做法。
更好的方法是重构您的生产代码以使用依赖注入、关注点分离和其他 OO 原则。然后很容易用 mock 替换 object
并使用 verify(object).method(eq(parameter));