首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring集成单元测试http:出站网关

Spring集成单元测试http:出站网关
EN

Stack Overflow用户
提问于 2015-01-15 10:41:18
回答 1查看 1.8K关注 0票数 2

试图找出如何在Spring工作流中最好地测试http:outbound-gateway

我们的网关是这样的:

代码语言:javascript
复制
<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. 验证来自第三方服务的响应处理;给出各种响应(预期和意外)和错误(内部和外部)的行为是什么?

我们已经有了许多单元测试,这些测试模拟出了端点,并断言了集成工作流的步骤与预期的行为。如下所示:

代码语言:javascript
复制
@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服务来进行交互,这更像是一种集成测试。
  • 第三方服务仅由url-expression解析,因此没有一个Spring可以模拟。

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

EN

回答 1

Stack Overflow用户

发布于 2015-01-15 13:37:55

框架测试中,我们使用DirectFieldAccessor将端点的RestTemplate替换为模拟(实际上是存根)。然而,这并不能测试转换器。

您可以变得更加复杂,在那里可以测试真正的RestTemplate;只需获得对它的引用(使用SI TestUtils.getPropertyValue()DirectFieldAccessor),并按照Spring框架文档中讨论的那样配置它。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27961588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档