5

我想对使用 bean 的 java 中配置的单个路由进行单元测试。我阅读了骆驼在行动中(第 6.1.4 章)如何做到这一点:

protected RouteBuilder createRouteBuilder() throws Exception {
    return new myRoute();
}

但在我的情况下,溃败需要注册一些 bean。我知道如何在独立应用程序中注册 bean:请参阅此处 但是如何在“CamelTestSupport”中注册 bean?有没有办法在没有注册表的情况下使用 bean?可能是通过注入它们(所有 bean 都没有 arg 构造函数)?我正在使用 Guice,在我的测试中我正在使用 Jukito (Guice+Mockito)。

4

3 回答 3

11

骆驼后3.0.0

您现在可以从可以访问骆驼上下文的任何地方更新 JNDI 注册表。

context.getRegistry().bind("myId", myBean);

此处提供更多信息https://camel.apache.org/manual/latest/camel-3-migration-guide.html#_camel_test

骆驼 3.0.0 之前

您需要覆盖 createRegistry() 方法,

@Override
protected JndiRegistry createRegistry() throws Exception {
    JndiRegistry jndi = super.createRegistry();

    //use jndi.bind to bind your beans

    return jndi;
}

@Test
public void test() {
    //perform test
}
于 2014-04-18T11:29:53.867 回答
3

不,您不能在没有注册表的情况下使用 bean。

您需要使用注册表来保存 bean 实例,否则 Camel 无法为您查找 bean。如果您的测试类扩展了 CamelTestSupport,您只需要覆盖 createRegistry() 方法即可使用您的 bean 设置正确的注册表。

于 2014-04-18T01:45:34.343 回答
1

从 Camel 3.0.0 开始不再推荐 @Matthew Wilson 提供的答案

他的解决方案还在摸索中,但实施细节已经改变。我选择将它注入setUp(示例在 Kotlin 中,使用您的 IDE 提示在 Java 中生成相同的):

override fun setUp() {
    super.setUp()
    context.registry.bind("yourBean", YourBean())
}

如您所见,注册表仍然涉及,但现在您只能从上下文中获取它。我认为将这些类型的设置例程保留在方便命名的可覆盖方法中会更简洁setUp。只是不要忘记调用父版本。

如果有更好的地方放置这种例程,请告诉我,以便我可以升级答案。

文档:https ://camel.apache.org/manual/latest/camel-3-migration-guide.html

于 2020-01-20T13:49:34.780 回答