Java 模拟链式rest客户端调用(Mockito)

Java 模拟链式rest客户端调用(Mockito),java,unit-testing,mockito,rest-client,Java,Unit Testing,Mockito,Rest Client,我在想办法嘲笑这个家伙。我通过Surefire得到了莫基托的祝福: @Inject private javax.ws.rs.client.Client client; ... String response = client.target(url).request(MediaType.APPLICATION_JSON).post(Entity.entity(request, MediaType.APPLICATION_JSON), String.class); 导致了一些非常可怕的嘲弄: do

我在想办法嘲笑这个家伙。我通过Surefire得到了莫基托的祝福:

@Inject
private javax.ws.rs.client.Client client;
...
String response = client.target(url).request(MediaType.APPLICATION_JSON).post(Entity.entity(request, MediaType.APPLICATION_JSON), String.class);
导致了一些非常可怕的嘲弄:

doReturn(mockWebTarget).when(mockClient).target(url);
doReturn(mockBuilder).when(mockWebTarget).request(MediaType.APPLICATION_JSON);
doReturn(response).when(mockBuilder).post(any(Entity.class), eq(String.class)); // <- really need to inspect that entity
doReturn(mockWebTarget).when(mockClient.target)(url);
doReturn(mockBuilder).when(mockWebTarget).request(MediaType.APPLICATION_-JSON);

doReturn(response).when(mockBuilder).post(any(Entity.class)、eq(String.class));//“我有莫基托的福分-什么?--“这有好的模式吗?”-是的:少用嘲弄。然而,自从我们开始编写集成测试以来,这将带来它自己的挑战备注:我建议使用
when(…)。然后返回(…)
而不是
doReturn(…)。when(…)
,因为前担保人在编译时键入safety。我同意您的所有观点,但测试请求通常很复杂。不确定使用javax客户机是否重要,但对于spring,您可以使用restemplate或WebClient。他们不需要锁链。然而,它们仍然会被复杂的请求和断言弄得一团糟。集成测试或契约测试也可能满足您的需求,但它们也可能在其他方面变得复杂。我的部门允许Mockito,但不允许其他类似powermock的测试。我正在通过surefire插件在maven进行驾驶考试。