在这里,DB只是一个示例。它意味着一些东西无法在单元测试环境中准备。
考虑下面的路由:
DBBean dbBean = new DBBean();
from("direct:test").bean(dbBean).to("direct:someOtherLogic");
当进行单元测试时,有没有一种方法可以模拟“dbBean”?在单元测试中,很难设置真实的数据库。谢谢你的帮助。
在这里,DB只是一个示例。它意味着一些东西无法在单元测试环境中准备。
考虑下面的路由:
DBBean dbBean = new DBBean();
from("direct:test").bean(dbBean).to("direct:someOtherLogic");
weaveByType(BeanDefinition.class).selectFirst().replace().to("mock:dbBean");
请查看上述链接以了解如何在Camel测试工具包(例如camel-test)JAR中使用advice-with。
请注意,建议告诉Camel测试工具包您正在使用advice with,方法如底部链接所述。
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route>
<from uri="timer://kickoff?period=10000"/>
<setBody>
<constant>select * from customer</constant>
</setBody>
<to uri="jdbc:testdb"/>
<to uri="mock:result"/>
</route>
</camelContext>
<!-- Just add a demo to show how to bind a date source for camel in Spring-->
<jdbc:embedded-database id="testdb" type="DERBY">
<jdbc:script location="classpath:sql/init.sql"/>
</jdbc:embedded-database>
DbBean db = new MockDbBean()
由于这只是普通的Java代码,您可以在RouteBuilder类中拥有一个getter/setter。
public class MyRouteBuilder extends RouteBuilder {
private DbBean dbBean;
// getter/setter for dbBean
public void configure() throws Exception {
from("direct:test").bean(dbBean).to("direct:someOtherLogic");
}
}
然后从单元测试中,只需要在MyRouteBuilder实例上使用setter设置MockDbBean即可。