如何使用带有参数的`any`匹配器

时间:2017-03-23 12:59:49

标签: java unit-testing junit matcher assertj

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

我不想做以下事情来解决问题

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

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

这是错误的方法。

更好的方法是重构您的生产代码以使用依赖注入关注点分离和其他OO原则。然后很容易用 mock 替换def add_parent(folders): parent = {0: '0'} result = [] for folder in folders: depth = folder['NAME'].split(' ')[0].count('-') + 1 parent[depth] = folder['ID'] folder['PARENT'] = parent[depth-1] result.append(folder) return result 并使用object