如何对调用泽西岛客户端 API 的单元测试代码?
我编写了调用泽西岛客户端API的代码,而该API又调用了我无法控制的Web服务。我不希望我的单元测试调用实际的 Web 服务。
为调用 Jersey 客户端 API 的代码编写单元测试的最佳方法是什么?我是否应该使用泽西服务器 API 编写 JAX-RS Web 服务,然后使用泽西岛测试框架进行单元测试?还是我应该嘲笑泽西岛的网络服务呼叫?我可以访问JMock。或者我应该尝试另一种方法?
在我的研究过程中,我发现这个讨论描述了各种选择,但我确实找到了一个完整的解决方案。是否有任何代码示例可以显示建议的 JUnit 方法?我在泽西岛的文档中找到任何内容。
以下是相关的源代码:
public String getResult(URI uri) throws Exception {
// error handling code removed for clarity
ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);
WebResource service = client.resource(uri);
String result = service.accept(accept).get(String.class);
return result;
}
以下是我想通过的测试代码示例。我想测试(1)传入有效的URI并获取有效的字符串,以及(2)传入无效的(无论出于何种原因 - 无法访问或未经授权)URI并获取异常。
@Test
public void testGetResult_ValidUri() throws Exception {
String xml = retriever.getResult(VALID_URI);
Assert.assertFalse(StringUtils.isBlank(xml));
}
@Test(expected = IllegalArgumentException.class)
public void testGetResult_InvalidUri() throws Exception {
retriever.getResult(INVALID_URI);
}
以上所有内容都是对我的代码所做工作的简单描述。实际上,在此之上有一个层,它接受两个 URI,首先尝试调用第一个 URI,如果该 URI 失败,则尝试调用第二个 URI。我希望单元测试涵盖(1)第一个URI成功,(2)第一个URI失败,第二个URI成功,以及(3)两个URI失败。此代码非常复杂,我想使用 JUnit 测试这些不同的方案,但要执行此操作,我要么需要运行实际的备用 Web 服务,要么模拟 Jersey 客户端 API 调用。