首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试rest端点- Camel 3+ Spring Boot

测试rest端点- Camel 3+ Spring Boot
EN

Stack Overflow用户
提问于 2020-03-24 10:33:27
回答 1查看 1.2K关注 0票数 0

我不知道如何用Apache 3测试端点休息。你能帮我吗?

这是我的密码。将xml解编组到pojo,然后pojo将其发送到外部服务"my.applications.url“。我需要嘲笑外界的反应。我该怎么做呢?

代码语言:javascript
复制
from("direct:my-application")
                .id("my-application")
                .log("app: ${body}")
                .log("country: ${headers.country}")
                .unmarshal(jaxbDataFormat).process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                ApplicationInput bodyIn = (ApplicationInput) exchange
                        .getIn().getBody();

                exchange.getIn().setBody(bodyIn);
            }
        }).setHeader(Exchange.HTTP_METHOD).constant(HttpMethod.POST).marshal().json(JsonLibrary.Jackson)
                .toD("{{my.applications.url}}?throwExceptionOnFailure=false") //<--- I need to mock in in test
                .choice()
                .when((header("CamelHttpResponseCode").isEqualTo("200")))
                        .unmarshal().json(JsonLibrary.Jackson, NCCLResponse.class)
                        .process(new Processor() {
                            @Override
                            public void process(Exchange exchange) throws Exception {

                                Message in = exchange.getIn();
                                int responseCode = in.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
                                myResponse response = (myResponse) exchange.getIn().getBody();
                                //create response
                                myApplicationOutput output = createResponseOk(responseCode, response);

                                exchange.getIn().setBody(output);
                            }

                        })
                .otherwise()
                .unmarshal().json(JsonLibrary.Jackson, myResponse.class)
                .process(new Processor() {
                    @Override
                    public void process(Exchange exchange) throws Exception {

                        Message in = exchange.getIn();
                        int responseCode = in.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
                        myResponse response = (myResponse) exchange.getIn().getBody();
                        //create response
                        ErrorResponse output = createResponseError(responseCode, response);
                        exchange.getIn().setBody(output);
                    }
                })
                .end();```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-25 15:57:26

如果您想在骆驼路由测试中模拟这个调用,可以使用AdviceWith

1)向要模拟的路由步骤添加一个identifier/marker

代码语言:javascript
复制
.toD("{{my.applications.url}}?throwExceptionOnFailure=false").id("RequestToMock")

2)然后使用AdviceWith来,将标记的步骤替换为其他

代码语言:javascript
复制
context.getRouteDefinition("yourRouteId").adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            weaveById("RequestToMock") // <-- same identifier
                    .replace()
                    .setBody(simple("resource:classpath:TestResponse.json"));
        }
    });

3)告诉骆驼您的测试使用AdviceWith (取决于您的测试类型)

代码语言:javascript
复制
@UseAdviceWith // for Spring Boot tests

@Override
public boolean isUseAdviceWith() { // for CamelTestSupport
    return true;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60829282

复制
相关文章

相似问题

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