【问题标题】:Mocking method if one argument is raw and other may be from list如果一个参数是原始参数而另一个参数可能来自列表,则模拟方法
【发布时间】:2020-04-23 02:39:22
【问题描述】:

我想测试是否使用一个原始参数和列表中的其他参数调用了 X 次方法。我找到了这个方法:

    Mockito.verify(mock,Mockito.times(3)).myMethod(Mockito.eq("lastName"),
                   Mockito.argThat(Matchers.isOneOf("firstName","name","firstName"))));

但是这抱怨 argThat 方法需要 ArgumentMatcher 但 Matchers.isOneOf 返回 org.hamcrest.Matcher

还有其他方法可以实现吗?

感谢您的帮助!

【问题讨论】:

    标签: java mockito hamcrest


    【解决方案1】:

    这在 Mockito 2.1.0 中发生了变化。在 Mockito 网站上,有此迁移建议。

    ArgumentMatcher 的所有现有自定义实现将不再 编译。将 hamcrest 匹配器传递给 argThat() 的所有位置 将不再编译。有两种方法可以解决问题:

    a) 将 hamcrest 匹配器重构为 Mockito 匹配器:使用 implements ArgumentMatcher 而不是 extends ArgumentMatcher。然后重构 describeTo() 方法转换为 toString() 方法。

    b) 使用org.mockito.hamcrest.MockitoHamcrest.argThat() 代替 Mockito.argThat()。确保 hamcrest 依赖于 类路径(Mockito 不再依赖于 hamcrest)。

    什么选项 适合你吗?如果您不介意将依赖项编译到 hamcrest 那么选项 b) 可能适合您。你的选择不应该有 影响大且完全可逆 - 您可以选择不同的选项 将来(并重构代码)

    【讨论】:

      猜你喜欢
      • 2020-08-08
      • 2021-02-11
      • 1970-01-01
      • 2011-07-12
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      相关资源
      最近更新 更多