我想設置一個駱駝路線的測試。我的測試路由讀取一個二進制文件並將其發送給一個翻譯器bean,返回一個POJO。現在,我想對POJO做一些斷言,以確保那些值與已知值相匹配。標準的東西,我認爲。在我見過的例子中,主體似乎總是一個String或原始類型,並且可以在其上完成一個簡單的斷言。但是,就我而言,它是一個對象,所以我想以某種方式獲取對象。正確的方法來測試我的對象在駱駝
這裏是我試過到目前爲止:
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("file:///path/to/dir/of/test/file/?noop=true")
.bean(TranslatorBean.class)
.to("mock:test").end();
}
};
}
@Test
public void testReadMessage() throws Exception {
MockEndpoint endpoint = getMockEndpoint("mock:test");
endpoint.whenAnyExchangeReceived(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
Object body = exchange.getIn().getBody();
assertIsInstanceOf(MyPOJO.class, body);
MyPOJO message = (MyPOJO) body;
assertEquals("Some Field", someValue, message.getSomeField());
// etc., etc.
}
});
//If I don't put some sleep here it ends before anything happens
Thread.sleep(2000);
}
當我運行它,它看來,它運行正常,但是當我單步執行,我可以看到一個斷言失敗。出於某種原因,這不會被報告。
於是我嘗試了我的內聯處理器的路線,像這樣:
public void configure() throws Exception {
.from("file:///path/to/dir/of/test/file/?noop=true")
.bean(TranslatorBean.class)
.process(new Processor() {
//same code as before
});
}
這類作品,但有一個巨大的問題。任何失敗的斷言仍然不會被JUnit報告。相反,它們被Camel捕獲,並報告爲CamelExecutionException,但完全沒有關於原因的信息。只有通過遍歷調試器才能確定哪個斷言失敗。另外,這樣我的整個測試都在配置方法中,而不是在它自己的測試方法中。我必須包含一個帶有睡眠的空測試來讓它運行。顯然這很糟糕,但我確信這裏要做的是正確的事情。它看起來像一個處理器可能不是正確的路線,但我沒有看到正確的方式。任何指導非常感謝。
你好,克勞斯,非常感謝你的迴應。我讀了很多關於你的書(我真的認爲這本書是我學習新技術時讀過的最好的書之一),以及在線文檔。測試身體的例子似乎都像你剛剛給出的「Hello World」,「Bye World」的例子,身體只是一個字符串,所以對身體的期望/斷言是有意義的。然而,我的消息體是一個對象,我需要做更多的參與測試。沒有辦法獲得信息的正文並測試一些字段嗎? Tusind tak! – Denial 2013-04-07 15:09:47