gpt4 book ai didi

java - Spring Integration 单元测试 http :outbound-gateway

转载 作者:行者123 更新时间:2023-11-30 08:17:14 26 4
gpt4 key购买 nike

试图弄清楚如何在 Spring Integration 工作流中最好地对 http:outbound-gateway 进行单元测试。

这是我们的网关的样子:

<int-http:outbound-gateway id="gateway"
request-channel="registrationQueue"
message-converters="jsonMessageConverter"
url-expression="@urlGenerator.resolve()"
http-method="POST"
expected-response-type="javax.ws.rs.core.Response"
reply-channel="nullChannel"
error-handler="httpResponseErrorHandler"/>

具体来说,我们想要..

  1. 断言正在发送的对象的序列化; message-converters 是否正确处理来自 request-channel 的消息?
  2. 验证来自第 3 方服务的响应处理;给出各种响应(预期和意外)和错误(内部和外部)的行为是什么?

我们有许多单元测试模拟端点并断言我们的集成工作流程的步骤按预期运行。类似于以下内容:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:test-config.xml"})
public class FileRegistrationWorkflowTest {

...

@Autowired
private MessageChannel fileFoundChannel;

@Autowired
private QueueChannel testRegistrationQueue;

...

@Test
public void shouldQueueRegistrationForFileWithEntityId() {
// Given
mockFileLookupService(FILE_ID, FILENAME_WITH_ENTITY_ID);
// When
fileFoundChannel.send(MessageBuilder.withPayload(FILE_ID).build());
// Then
Message<?> message = testRegistrationQueue.receive();
assertThat(message, hasPayload(expected));
}

}

这种测试方法非常适合工作流程中的步骤。我们的问题是测试端点网关..

  • 我们无法模拟 http:outbound-gateway,因此我们不会对其进行测试。
  • 我们不想部署真正的 HTTP 服务来与之交互,这更像是一个集成测试。
  • 第 3 方服务仅由 url-expression 解析,因此没有可模拟的 Spring bean。

也许我们可以拦截 Spring 尝试发送的 HTTP 请求?

最佳答案

framework tests我们使用 DirectFieldAccessor 将端点的 RestTemplate 替换为模拟(实际上是 stub )。但是,这不会测试转换器。

您可以变得更加复杂,可以测试真正的 RestTemplate;只需获取对它的引用(使用 SI TestUtils.getPropertyValue()DirectFieldAccessor)并按照 Spring Framework documentation 中的讨论配置它.

您可以获得对具有 bean 名称 endpointId.handler 的处理程序的引用。

关于java - Spring Integration 单元测试 http :outbound-gateway,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27961588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com