【问题标题】:Ways to mock Camel Endpoint POJO producer模拟 Camel Endpoint POJO 生产者的方法
【发布时间】:2015-12-10 09:29:52
【问题描述】:

我遵循指南here,并且成功地在我的 bean 端点上配置了一个生产者,如下所示:

@Produce( uri = "activemq:foo" )
  private MyListener myListener; 

MyListener 是:

public interface MyListener {

  @InOnly
  public void send( String message );
}

还有我的豆子:

    public class MyBeanEndpoint {

          @Produce( uri = "activemq:foo" )
          private MyListener myListener; 

          @Handler
          public void doSomething( final Object body ) {
            ...
    }

public void setMyListener( final MyListener myListener ) {
    this.myListener = myListener;
  }

现在,我该如何测试呢? 我的意思是:我的测试扩展了CamelTestSupport,我用

配置了我的路线
@Override
  public RouteBuilder createRouteBuilder() {
    return new RouteBuilder() { ... }

也就是说:我已经复制了骆驼上下文,但我没有配置弹簧上下文,我希望(如果可能)避免实例化它。

如何模拟生产者或让 Camel 实例化并将这个 bean 注入我的 bean 端点? 使用 Apache Camel 功能(如 CamelTestSupport 和类似实用程序)测试这种情况的最佳方法是什么?

我的参考测试是:

public class Test extends CamelTestSupport {

  private static BeanEndpoint beanEndpoint

  @BeforeClass
  public static void init() { 
    beanEndpoint.setActivemqMyListener( ??? );
  }

  @Override
  public CamelContext createCamelContext() {
    context = new DefaultCamelContext();
    context.addComponent( "activemq", new SedaComponent() );
    return context;
  }

  @Override
  public RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {

      @Override
      public void configure() throws Exception {

        from( "activemq:foo" )
                .to( "mock:out" );

      }
    };
  }

  @Test
  public void testFooQueue() throws Exception {}

【问题讨论】:

  • 如何创建您的 my bean ?你需要一些依赖注入来注入那个监听器,
  • 嗨,是的,我通过 spring 上下文成功注入了这个 bean。我的问题是:我如何对它进行单元测试?有没有办法模拟这样的生产者,避免依赖注入并手动注入生产者模拟对象(这就是我正在寻找的)还是我必须实例化一个弹簧测试上下文来测试它?
  • 你想要什么,将端点更改为不发送到activemq?
  • 或多或少,我在问题中添加了我的测试代码。我会在 mock:out 上做出断言,因为只有在满足特定条件时我才会在 activemq:foo 上发布

标签: java apache-camel


【解决方案1】:

让 Camel 创建你的 bean,然后为你配置各种依赖注入等等。

private static BeanEndpoint beanEndpoint

 ...

beanEndpoint = camelContext.getInjector().newInstance(BeanEndpoint.class);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多