如何为Json编写Mockito.when().mapper().constructType(类型)

6bc51xsx  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(160)

谁能告诉我如何模仿和编写Mockito.when()方法

@Override
public Property resolveProperty(Type type, ModelConverterContext context, Annotation[] annotations, Iterator<ModelConverter> chain) {
   JavaType jType = Json.mapper().constructType(type);
   ...
}

我写了

when(Json.mapper()).thenReturn(objectMapper);
when(objectMapper.constructType(type)).thenReturn(jType);

我遇到以下错误
错误使用。缺少方法调用异常:when()需要一个参数,该参数必须是“对模拟的方法调用”。例如:

when(mock.getArticles()).thenReturn(articles);

此外,出现此错误的原因可能是:

  • 您可以存根以下任一项:final/private/equals()/hashCode()方法。这些方法不能被存根/验证。
  • 在when()中,您不是在mock上调用方法,而是在其他对象上调用方法。
  • 模拟类的父类不是公共的。2这是模拟引擎的一个限制。
tzxcd3kk

tzxcd3kk1#

你试图模仿一个静态方法。这是不鼓励的,但是如果你仍然想这样做,你需要使用Mockito的3.4.0或更高版本的mockStatic方法(应该使用mockito-inline依赖关系)。

var objectMapper = mock(ObjectMapper.class);
when(objectMapper.constructType(type)).thenReturn(jType);
try (var mocked = mockStatic(Json.class)) {
    mocked.when(Json::mapper).thenReturn(objectMapper);
    // execute the tested code
 }

See multiple examples here

相关问题