如何使用Mockito模拟实体



我正在使用Mockito模拟Jersey客户端API。我有一个模拟响应,它会返回一个nullPointerException

这就是我到目前为止所做的

when(invocationBuilder.post(Entity.entity(anyString(),MediaType.APPLICATION_XML))).thenReturn(response);

有没有办法解决这个问题。谢谢,

不能像那样使用Mockito匹配器:它们只能在顶级中使用(此处,作为post的参数)。此外,当您使用一个匹配器时,必须对所有参数使用匹配器。我在这里写了更多关于火柴人的文章。

anyString这样的匹配器实际上返回null,而NullPointerException很可能来自于Entity.entity未能接受null值。(当您在whenverify语句中正确使用匹配器时,Mockito无论如何都会截获调用,因此null不会干扰任何内容。)

相反,您需要返回所有内容的响应,然后使用ArgumentCaptor稍后确保MediaType为APPLICATION_XML:

when(invocationBuilder.post(any())).thenReturn(response);
/* ... */
ArgumentCaptor<Entity> captor = ArgumentCaptor.forClass(Entity.class);
verify(invocation).post(captor.capture());
assertEquals(APPLICATION_XML, captor.getValue().getMediaType());

或者使用自定义ArgumentMatcher<Entity>进行匹配:

ArgumentMatcher<Entity> isAnXmlEntity = new ArgumentMatcher<Entity>() {
  @Override public boolean matches(Object object) {
    if (!(entity instanceof Entity)) {
      return false;
    }
    Entity entity = (Entity) object;
    return entity.getMediaType() == APPLICATION_XML;
  }
};
when(invocationBuilder.post(argThat(isAnXmlEntity)).thenReturn(response);

相关内容

  • 没有找到相关文章

最新更新