代码之家  ›  专栏  ›  技术社区  ›  Sasha Shpota A-Bag

Mockito:验证参数而不必强制转换它

  •  2
  • Sasha Shpota A-Bag  · 技术社区  · 6 年前

    我有一个具有以下方法的服务类:

    void doSomething(List<String> list)
    

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

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

    如你所见 我不得不把争论转移到 List<String> 否则不会编译:

    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
    

    问题:

    1 回复  |  直到 6 年前
        1
  •  3
  •   Piotr Rogowski    6 年前

    我更喜欢这个解决方案:

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