【发布时间】:2015-08-27 18:54:20
【问题描述】:
我正在尝试为我的程序编写单元测试并使用模拟数据。我对如何拦截对 URL 的 HTTP Get 请求有点困惑。
我的程序调用我们 API 的 URL,并返回一个简单的 XML 文件。我希望测试不是从在线 API 获取 XML 文件,而是从我这里接收预定的 XML 文件,以便我可以将输出与预期输出进行比较,并确定一切是否正常。
我被指向 Mockito 并且已经看到了许多不同的示例,例如这个 SO 帖子,How to use mockito for testing a REST service?,但我不清楚如何设置它以及如何模拟数据(即,返回我自己的 xml每当调用 URL 时文件)。
我唯一能想到的是让另一个程序在 Tomcat 上本地运行,并在我的测试中传递一个特殊的 URL,该 URL 调用 Tomcat 上本地运行的程序,然后返回我想要测试的 xml 文件。但这似乎有点矫枉过正,我认为这是不可接受的。有人能指出我正确的方向吗?
private static InputStream getContent(String uri) {
HttpURLConnection connection = null;
try {
URL url = new URL(uri);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "application/xml");
return connection.getInputStream();
} catch (MalformedURLException e) {
LOGGER.error("internal error", e);
} catch (IOException e) {
LOGGER.error("internal error", e);
} finally {
if (connection != null) {
connection.disconnect();
}
}
return null;
}
如果有帮助,我正在使用 Spring Boot 和 Spring 框架的其他部分。
【问题讨论】:
-
你能贴出你想测试的代码单元吗?
-
对不起,我本来打算这样做的。我不知道我是否也应该发布辅助功能?主要部分我想看看如何用假数据模拟那个 URL 调用。
-
你总是可以使用在 localhost 上运行的网络服务器而不是 mockito mock。
-
我如何将其封装到一个项目中,以便其他开发人员可以在未来几年内复制我的测试?它总是两个独立的应用程序,不是吗?
-
您可以在单元测试中轻松启动 HTTP 服务器。看看undertow.io。
标签: java unit-testing http junit mockito