web-services - 如何模拟 WS 客户端并在 Camel route 提供响应

标签 web-services unit-testing apache-camel

我想在 Camel 路由中模拟 WS 客户端调用,检查请求并提供响应。

这是一个测试

package com.example.helloworld;

import org.apache.camel.*;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit4.CamelSpringTestSupport;
import org.junit.Test;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author deveproject
 * @version 9/15/14
 */
public class WsClientMockTest extends CamelSpringTestSupport {

    @Produce(uri = "direct:test-ws-client-mock")
    protected ProducerTemplate template;

    @Override
    public String isMockEndpoints() {
        return "cxf:bean:greeterService";
    }

    @Test
    public void testGetActionRoute() throws Exception {
        MockEndpoint greeterService = getMockEndpoint("mock:cxf:bean:greeterService");

        greeterService.expectedMessagesMatches(new Predicate() {

            @Override
            public boolean matches(Exchange exchange) {
                assertEquals("U.S.", exchange.getIn().getBody(String.class));
                return true;
            }
        });
        template.sendBody("U.S.");


        greeterService.assertIsSatisfied();
    }

    @Override
    protected AbstractApplicationContext createApplicationContext() {
        return new ClassPathXmlApplicationContext("META-INF/spring/camel-context.xml");
    }
}

org.apache.camel.Predicate 检查请求是否正确。
我找不到如何提供回复的方法。

我有上述测试的工作示例。我可以按需发布。

谢谢你。

最佳答案

您可以将 returnReplyBody(Expession expression) 方法用于模拟响应。

看例子:

@Test
public void testGetActionRoute() throws Exception {
    MockEndpoint greeterService = getMockEndpoint("mock:cxf:bean:greeterService");

    greeterService.returnReplyBody(new Expression() {
        @Override
        public <T> T evaluate(Exchange exchange, Class<T> type) {
            GreeterServiceResponse response = new GreeterServiceResponseResponse();
            response.setGreeting("Hello!");
            return (T) response;
        }
    });

    greeterService.expectedMessagesMatches(new Predicate() {

        @Override
        public boolean matches(Exchange exchange) {
            assertEquals("U.S.", exchange.getIn().getBody(String.class));
            return true;
        }
    });
    template.sendBody("U.S.");


    greeterService.assertIsSatisfied();
}

关于web-services - 如何模拟 WS 客户端并在 Camel route 提供响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25856512/

相关文章:

unit-testing - 如何断言和测试 ReactJS/Fluxible 组件的状态?

unit-testing - NUnit 中是否有 "soft"断言?

java - 将 CSV 文件转换为 Java 对象 (POJO) 并将其发送到 ActiveMQ 队列

java - 如何在Java程序中访问spring配置文件中定义的路由

java - 如何通过 javax.xml.ws.Service 进行调用

java - WSDL 端口的详细信息

unit-testing - 使用最小起订量 - 问题

web-services - 最 RESTful 的身份验证形式是什么?谁在使用它?

wcf - 消息安全异常 : Security processor was unable to find a security header in the message

java - 使用camel聚合器接收多封电子邮件时遇到问题