模拟测试类Spring骆驼

时间:2015-06-02 07:15:42

标签: junit apache-camel spring-test

我是骆驼新手。我正在尝试编写测试用例。

public class A
{
   private B b;

   public void update(String s){
   //calling some methods on B
   .....
   }
}

测试课

public class TestA extends CamelSpringTestSupport
{
  private ClassPathXmlApplicationContext xmlAppContext;

  @Test
  public void testA()
  {
    String xml = "some xml";
    Endpoint endpoint = context.getEndpoint("direct:incomingxml");
    Exchange inExchange = endpoint.createExchange();
    inExchange.getIn().setBody(xml);
    inExchange.setPattern(ExchangePattern.InOnly);
    template.send(endpoint, inExchange);
  }

   @Override
   protected AbstractApplicationContext createApplicationContext()
   {
       xmlAppContext = new ClassPathXmlApplicationContext(
            "classpath:/test-camel-context.xml"); 
       return xmlAppContext;
   }
}

spring bean xml

 <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">

        <route>
            <from uri="direct:incomingxml"/>
            <to uri="bean:classA?method=update"/>
        </route>

      </camelContext>

       <bean id="b" class="B">
       </bean>

       <bean id="classA" class="A">
           <constructor-arg index="0" ref="b" />
       </bean>

有几个使用真实对象预先编写的测试用例。有什么方法可以模拟这个B类,在A类中注入并模拟一些方法吗?我只想在我的测试用例中这样做,以便预先编写的测试用例不受影响?

1 个答案:

答案 0 :(得分:1)

您可以通过在A类中添加一个setter来解决此问题。

将加载应用程序上下文,并且将在XML中声明的bean注入A对象,但您仍然可以通过调用测试中新定义的setter来模拟B来覆盖它。

然后通过这样做,B&#39的模拟将用于您的测试而不是bean。其他测试用例不会受到影响。