MockEndpoint无法运行路线

时间:2018-12-04 20:41:51

标签: java apache-camel

使用mock来启动here所示的salesforce流式传输路由,对于以下路由失败:

from("salesforce:AccountUpdateTopic?notifyForFields=ALL&notifyForOperations=ALL")  
.tracing().convertBodyTo(String.class).to("file:D:/tmp/")
.to("mock:output") 
.log("SObject ID: ${body}");

package org.apache.camel.component.salesforce;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.component.salesforce.internal.OperationName;
import org.junit.Test;

public class StreamingApiIntegrationTest extends AbstractSalesforceTestBase {

    @Test
    public void testSubscribeAndReceive() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:AccountUpdateTopic");
        mock.start();
        Thread.sleep(10000);
        mock.stop();
    }

    @Override
    protected RouteBuilder doCreateRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                // test topic subscription
                from("salesforce:AccountUpdateTopic?notifyForFields=ALL&notifyForOperations=ALL").tracing().convertBodyTo(String.class).to("file:D:/tmp/").to("mock:output").log("SObject ID: ${body}");
            }
        };
    }
}

运行此测试不会启动路由(更新不会从Salesforce获取并存储在/ tmp /中)。

可以模拟运行路线并等待来自Salesforce的更新吗?是否有一个简短的示例可以允许在不使用spring的情况下测试Salesforce路线?

1 个答案:

答案 0 :(得分:0)

您误解了Camel Mock组件。嘲弄什么都没有开始。它们只是记录和声明收到的消息的终结点。

要触发骆驼路线,您必须向其发送一条消息。您可以使用ProducerTemplate轻松完成此操作。

您提到的示例中的这一行正是这样做的。

CreateSObjectResult result = template().requestBody(
        "direct:upsertSObject", merchandise, CreateSObjectResult.class);

templateProducerTemplaterequestBody的一种向端点direct:upsertSObject发送消息并等待响应的方法。有关各种现有签名,请参见Javadocs of ProducerTemplate