我嘗試對 Apache Camel 進行單元測驗,并從一個真正的基本案例開始,我的路線如下所示:
public class TestRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
from("jpa:Data").to("jpa:Data").id("testId");
}
}
現在以下方法不起作用。我嘗試模擬所有端點,但是我得到了mock://jpa:Data Received message count. Expected: <1> but was: <0>
public class RouteTest extends CamelTestSupport {
@Override
@BeforeEach
public void setUp() throws Exception {
super.setUp();
}
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new TestRoute();
}
@Override
public boolean isUseAdviceWith() {
return true;
}
@Test
void testRoute() throws Exception {
AdviceWith.adviceWith(context, null, false, a -> {
a.replaceFromWith("direct:start");
a.mockEndpointsAndSkip("*");
});
context.start();
// The false here makes sure that I get an exception if I'm using a name
// of a nonexistent mocked endpoint, so that shouldn't be the problem here
getMockEndpoint("mock:jpa:Data", false).expectedMessageCount(1);
var data = getSomeTestData();
template.sendBody("direct:start", data);
assertMockEndpointsSatisfied();
}
}
我發現的一種解決方法是a.mockEndpointsAndSkip("*");用a.weaveById("testId").replace().to("mock:jpa:Data");. 但是我不確定在這種情況下有什么區別,考慮mockEndpointsAndSkip還應該用模擬版本替換所有端點。在實際場景中手動替換所有端點會有點麻煩。
uj5u.com熱心網友回復:
這是因為通過使用*as 模式來模擬端點的 URI,您還包括您的from端點direct:start,這意味著它也被模擬,因此訊息不會傳輸到路由的其余部分,因此mock:jpa:Data不會收到任何訊息。
使用僅與您的to端點匹配的更具體的模式,例如jpa:Data.
僅供參考,您可以通過利用現有方法來簡化代碼,例如replaceRouteFromWith和isMockEndpointsAndSkip下一個:
@Override
@BeforeEach
public void setUp() throws Exception {
// The new from endpoint for the route "testId"
replaceRouteFromWith("testId", "direct:start");
super.setUp();
}
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new TestRoute();
}
@Override
public String isMockEndpointsAndSkip() {
// The pattern or the URI of endpoints to mock
return "jpa:Data";
}
@Test
void testRoute() throws Exception {
MockEndpoint mockEndpoint = getMockEndpoint("mock:jpa:Data")
mockEndpoint.expectedMessageCount(1);
var data = getSomeTestData();
template.sendBody("direct:start", data);
mockEndpoint.assertIsSatisfied();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/515849.html
標籤:爪哇阿帕奇骆驼
下一篇:從初始陣列生成所有子陣列的演算法
