java - 如何将 `any` 匹配器与对象参数一起使用

标签 java unit-testing junit matcher assertj

我在使用 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/

相关文章:

java - 为包中的所有类创建切入点?

java - Resources$NotFoundException 调用 Robolectric.buildActivity() 时

java - jUnit 使用 File 函数时出现 NullPointerException

java - 如何使用 Mockito 和 JUnit 检查方法中的 if 语句?

java - 从多个表中选择 count(*)

java - 在 android studio 中检查互联网连接

java - JSF:如何同时渲染=#{bean.isRendered}多个组件

unit-testing - nUnit 测试相互依赖关系/层次结构

unit-testing - 您应该在单元测试中使用 Moq 提供的 "Verify"和 "VerifyAll"方法吗?

java - 在 JUnit @BeforeClass 中加载属性文件