代码之家  ›  专栏  ›  技术社区  ›  Koray Tugay

如何使用ArgumentMatchers告诉任何队列Mockito?

  •  0
  • Koray Tugay  · 技术社区  · 6 年前

    我试图嘲笑以下方法:

    @Override
    public void handleStorage(TradeItem tradeItem,
                              ProductImagesMap productImagesMap,
                              List<Integer> indicesToProcess,
                              int countProductImages,
                              Queue<EcomImageMetadata> ecomImageMetadataQueue,
                              ImageServiceType imageServiceType,
                              ProductImageDTO productImageDTO) throws IllegalAccessException {
    

    import static org.mockito.ArgumentMatchers.*;
    
    final Class<Integer> integerClazz = Integer.class;
    final Class<EcomImageMetadata> ecomImageMetadataClazz = EcomImageMetadata.class;
    Mockito.when(productImageStorageService.handleStorage(eq(mockTradeItem), eq(productImagesMap), anyListOf(integerClazz), anyInt(), anyIterableOf(ecomImageMetadataClazz), anyObject(), anyObject()))
                .thenReturn(null);
    

    我不明白为什么 anyListOf(integerClazz) 有效,但是 anyIterableOf(ecomImageMetadataClazz)

    Error:(157, 152) java: incompatible types: no instance(s) of type variable(s) T exist so that java.lang.Iterable<T> conforms to java.util.Queue<org.gs1ca.dar.domain.EcomImageMetadata>
    

    我该怎么排队?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Roman-Stop RU aggression in UA    6 年前

    使用参数匹配器的泛型版本 ArgumentMatchers.any() . 在java 7之前的版本中,需要指定如下类型:

    ArgumentMatchers.<Queue<EcomImageMetadata>>any()
    

    如果您使用的是java 8+,请使用: ArgumentMatchers.any()