【问题标题】:Mockito: verify parameter without having to cast itMockito:验证参数而无需强制转换
【发布时间】:2018-08-23 09:50:18
【问题描述】:

我有一个服务类,方法如下:

void doSomething(List<String> list)

我模拟了这个类,我想验证作为参数传递的列表是否只有一个元素。我是这样做的:

verify(myService).doSomething((List<String>) argThat(hasSize(1))))

如您所见 我必须将参数转换为 List&lt;String&gt; 否则它不会被编译:

incompatible types: inferred type does not conform to upper bound(s)
  inferred: java.util.Collection<? extends java.lang.Object>
  upper bound(s): java.util.List<java.lang.String>,java.lang.Object

问题:如何在不进行强制转换的情况下验证调用?我想让事情保持简单、可读和优雅。

【问题讨论】:

    标签: java junit mockito junit4 hamcrest


    【解决方案1】:

    我更喜欢这个解决方案:

    final ArgumentCaptor<List> argumentCaptor = ArgumentCaptor.forClass(List.class);
    
    verify(myService).doSomething(argumentCaptor.capture());
    
    assertThat(argumentCaptor.getValue().size()).isEqualTo(1);
    

    【讨论】:

    • 谢谢。有效。我不得不修改你的代码,因为你发布它的方式它没有被编译 - 它需要ArgumentCaptor&lt;List&lt;String&gt;&gt;,我必须这样做:stackoverflow.com/a/5655702/2065796。如果没有更好的答案,我稍后会接受你的答案。虽然它可以工作,但仍然相当复杂,使用匹配器组合的代码会更短更清晰。
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 1970-01-01
    相关资源
    最近更新 更多