我有以下春天路線:彈簧試驗駱駝基於內容的路由
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="activemq:topic:inbox" />
<choice>
<when>
<simple>${in.header.Value}</simple>
<log message="Cc: ${in.header.Value}" />
</when>
</choice>
<to uri="mock:result" />
</route>
</camelContext>
我必須使用彈簧試驗(CamelSpringJUnit4ClassRunner)的要求,但我發現很容易理解如何測試條件實例與Java DSL。我的測試類是這樣的:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@BootstrapWith(CamelTestContextBootstrapper.class)
@ContextConfiguration(locations = "file:src/main/resources/META-INF/spring/camel-context-activemq-embedded.xml")
@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
@MockEndpoints("log:*")
@DisableJmx(false)
public class MyTest{
private Logger LOG = LogManager.getLogger(MyTest.class.getName());
protected Exchange exchange;
protected CustomComponent customComponent= new CustomComponent();
@Produce(uri = "activemq:topic:inbox")
protected ProducerTemplate template;
@EndpointInject(uri = "mock:result")
protected MockEndpoint resultEndpoint;
@Test
public void tes1() throws InterruptedException {
String headerValue= MyComponent.Value;
EmailAddress recipients = new EmailAddress("[email protected]");
template.sendBodyAndHeader("activemq:topic:inbox", recipients.toString(), headerValue);
resultEndpoint.expectedBodiesReceived(headerValue);
resultEndpoint.expectedHeaderReceived("header value", headerValue);
resultEndpoint.expectedMessageCount(1);
}
我努力理解如何測試由CBR所規定的實際情況,但更重要的是,我懷疑這是否是即便是爲了測試它的正確方法。 MyComponent.VALUEConstant是在我的自定義組件中指定的屬性,上面的測試實際上是通過的。但是,如果我使用組件上的其他屬性實例化headerValue,並且因此條件應該失敗,則測試會通過。你能幫忙嗎?
謝謝
我
嗨,謝謝你的幫助。我相信我對簡單表達式本身非常困惑,因爲Value是我自定義組件中的一個實際屬性(僅由我部分編寫)只映射到「Value」。所以,如果我錯了,請糾正我的錯誤,我相信我需要用實際的電子郵件地址創建該值的實例,然後通過sendBodyAndHeader發送它,對吧? – paranza
是的,我以爲自己需要有一個端點(模擬)來驗證消息是否被接收(在之內)。但是,我無法改變春季路線。有沒有什麼方法(我真的在尋找)注入另一個模擬,但只有在測試中? –
paranza
我的路線中可以有多個模擬端點嗎?我有一些簡單的日誌:我想驗證的消息以及選擇條件。 – paranza