我在使用 assertThat(object.method(new SomeClass(someParam)))
结果时遇到问题,比较是在实际运行测试时进行的,匹配器正在比较对象引用而不是对象的内容作为 equals
方法不会被覆盖。
我不想执行以下操作来解决问题
- 模拟构造函数,因为我想使用实际调用该方法的真实对象
assertThat(object.method(any(SomeClass.class)))
因为它放松了测试,并且参数someParam
很重要。
是否有解决方案可以执行以下操作?
assertThat(object.method(any(SomeClass.class, someParam)))
它将匹配使用传递参数的特定构造函数调用它的两个对象。
最佳答案
Mock constructor since I want to use the real object where the method is actually called
这是错误的做法。
更好的方法是重构生产代码以使用依赖注入(inject)、关注点分离和其他面向对象原则。然后很容易用 mock 替换 object
并使用 verify(object).method(eq(parameter));
关于java - 如何将 `any` 匹配器与对象参数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42976793/