使用mock来启动here所示的salesforce流式传输路由,对于以下路由失败:
from("salesforce:AccountUpdateTopic?notifyForFields=ALL¬ifyForOperations=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¬ifyForOperations=ALL").tracing().convertBodyTo(String.class).to("file:D:/tmp/").to("mock:output").log("SObject ID: ${body}");
}
};
}
}
运行此测试不会启动路由(更新不会从Salesforce获取并存储在/ tmp /中)。
可以模拟运行路线并等待来自Salesforce的更新吗?是否有一个简短的示例可以允许在不使用spring的情况下测试Salesforce路线?
答案 0 :(得分:0)
您误解了Camel Mock组件。嘲弄什么都没有开始。它们只是记录和声明收到的消息的终结点。
要触发骆驼路线,您必须向其发送一条消息。您可以使用ProducerTemplate轻松完成此操作。
您提到的示例中的这一行正是这样做的。
CreateSObjectResult result = template().requestBody(
"direct:upsertSObject", merchandise, CreateSObjectResult.class);
template
是ProducerTemplate和requestBody
的一种向端点direct:upsertSObject
发送消息并等待响应的方法。有关各种现有签名,请参见Javadocs of ProducerTemplate。