java - 在测试上下文中传递 HTTP 调用

标签 java spring unit-testing rest servlets

我正在尝试对我实现的 Spring bean 进行单元测试,但在这里遇到了困难。该 bean 用于在某些情况下调用远程 REST 服务。

但是,在我的测试中,我希望它在我的测试环境调用一个模拟 servlet,而不是远程服务器。

调用是使用 Apache 的 httpclient 库进行的,URL 在 applicationContext 中设置(因此我可以在测试时向 bean 提供任何伪造的 URI)。该服务应返回一个流。

调用如下所示:

HttpClient client = new DefaultHttpClient();
URIBuilder builder = new URIBuilder(theURIProvidedInContext);
// set parameters on builder
URI uri = builder.build();

HttpGet get = new HttpGet(uri);
HttpEntity entity = client.execute(get).getEntity();
return entity.getContent();

我整个上午都在 Google 上搜索,但只找到了如何对 servlet 进行单元测试。有人可以在这里提供一些见解吗?

最佳答案

您将无法在测试上下文中调用模拟 servlet,因为没有应用程序服务器。相反,您可以将使用 HTTP 客户端的代码提取到一个单独的 bean 中,然后模拟它以返回所需的流。

如果它是 REST 服务,您可以创建一个 JAX-RS 注释类作为测试替身(我不会称它为模拟),并使用 Grizzly 或 Jersey 等嵌入式服务器启动它。这将为您启动一个 HTTP 服务器。您的注释类可以抛出 404、500 等,具体取决于您希望测试如何进行。参见 JAX-RS with embedded server

关于java - 在测试上下文中传递 HTTP 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12815883/

相关文章:

java - 值小于 1 的 Java BigInteger 的幂运算

java - 尝试设置 spring servlet 时获取 "WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI ..."

java - 为什么事务在 Spring JPA 中没有回滚到所需的传播级别?

c# - 模拟 IOrganizationService (Dynamics CRM) 时未过滤 LINQ 查询结果

java - 存储文本文档中的字符串并将其打印到屏幕上

java - Android 中如何转义字符串?

java - 在java中测试两个dom元素是否相等

unit-testing - 错误 : suite. go:61: test paniced: reflect: Call with too few input arguments

java - 如何使用 driver.findelements() 获取数组列表中谷歌搜索的下拉值

spring - 如何自定义 Hibernate @Size 错误消息以指示输入字段的长度