首页 > 解决方案 > 使用泛型类型的模拟方法

问题描述

鉴于此界面:

public interface JsonService {
    <T> T read(String path, Class<T> valueType);
}

该方法是这样使用的:

MyClass object = jsonService.read("file.json", MyClass.class);

我想编写单元测试,并模拟这种方法。使用 Mockito,我嘲笑了jsonService

private final JsonService jsonService = Mockito.mock(JsonService.class);

我尽我所能嘲笑这个方法:

when(jsonService.<MyClass>read(any(String.class), any(Class.class))).thenReturn(nonNullObject);

当测试运行时,该方法.read()返回 null 而不是我的“nonNullObject”对象。我认为这与any(Class.class)不匹配的MyClass.class.

谢谢您的帮助

标签: javaunit-testingjava-8mockitojunit5

解决方案


你可以有严格的匹配器

when(jsonService.<MyClass>read(eq("file.json"), 
       eq(MyClass.class))).thenReturn(nonNullObject);

推荐阅读