我正在使用Mockito来模拟Jersey Client API。我有一个模拟响应,它返回when(invocationBuilder.post(Entity.entity(anyString(),MediaType.APPLICATION_XML))).thenReturn(response);
。
这是我到目前为止所做的事情
key=
无论如何要解决这个问题。 谢谢,
答案 0 :(得分:1)
你不能像这样使用Mockito匹配器:它们只能用在顶层(这里作为post
的参数)。此外,当您使用一个匹配器时,您必须对所有参数使用匹配器。我写过more about matchers here。
anyString
之类的匹配器实际返回null
,而您的NullPointerException可能来自Entity.entity
无法接受null
值。 (当您在when
或verify
声明中正确使用匹配器时,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());
或使用a custom 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);