在我們的項目,我們不創建模擬FTP服務器來測試路線但是我們使用的屬性可以被一個file
駱駝組件替代,用於本地開發和單元測試。
您的代碼應該是這樣的:
public class MyRoute extends RouteBuilder
{
@Override
public void configure()
{
onException(EdiOrderParsingException.class)
.handled(true)
.to("{{myroute.error}}");
from("{{myroute.input.endpoint}}")
.bean(new OrderEdiTocXml())
.convertBodyTo(String.class)
.convertBodyTo(Document.class)
.choice()
.when(xpath("/cXML/Response/Status/@text='OK'"))
.to("{{myroute.valid.endpoint}}}")
.otherwise()
.to("{{myroute.invalid.endpoint}}");
}
}
並在本地和系統測試中,我們使用一個文件終點在屬性文件中聲明:
myroute.input.endpoint=file:/home/user/myproject/input
myroute.valid.endpoint=file:/home/user/myproject/valid
myroute.invalid.endpoint=file:/home/user/myproject/invalid
myroute.error=file:/home/user/myproject/error
或一個JUnit CamelTestSupport可以使用用於設置要覆蓋的屬性的useOverridePropertiesWithPropertiesComponent
方法。
作爲替代方案,你也可以使用「直接」路線,而不是,但你可以錯過可以通過單元測試來測試一些文件選項。
,我們只通過設置這樣的性能測試與實際系統的FTP連接:
myroute.input.endpoint=ftp://hostname/input
myroute.valid.endpoint=ftp://hostname/valid
myroute.invalid.endpoint=ftp://hostname/invalid
myroute.error=ftp://hostname/error
有了這個,你也可以有e.g生產服務器將從集成測試環境中區分不同的配置。屬性對生產環境
例子:
myroute.input.endpoint=ftp://hostname-prod/input
myroute.valid.endpoint=ftp://hostname-prod/valid
myroute.invalid.endpoint=ftp://hostname-prod/invalid
myroute.error=ftp://hostname-prod/error
在我看來,這是完全可以使用的文件端點,以簡化的JUnit代碼,它會測試路線,而不是連接。
測試連接更像是一個集成測試,並應與真正的外部系統連接真實服務器上執行(你的情況的FTP服務器,但也可以是其他終端/系統以及)。
通過使用屬性,你還可以配置不同的URL的每個環境(例如:我們有3個的測試環境和一個生產環境,都具有不同的端點)。
我把端點定義爲「ftp:// host/incoming?move = processed」。我如何確保文件已被移至「已處理」目錄?我將如何與此相提並論? Camel是否爲「已處理」創建了一個單獨的端點? – 2012-03-05 00:43:11
我也有兩個來自(..)的定義(1定義了處理PO的路由,另一個定義了處理髮票的路由),在這種情況下replaceFromWith(...)是否替換了這兩個路由? – 2012-03-05 00:59:19
我想出了第二條評論的答案。我需要在context.getRouteDefinitions()。get(0)方法中使用適當的索引。請幫我評論1。 – 2012-03-06 02:26:06