当前位置: 首页 > 知识库问答 >
问题:

模拟测试类Spring camel

蒋茂材
2023-03-14
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个答案

仇承志
2023-03-14

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

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

那么通过这样做,B的mock将在测试中使用,而不是bean。其他测试用例不会受到影响。

 类似资料:
  • 简介 在 Laravel 应用程序测试中,你可能希望「模拟」应用程序的某些功能的行为,从而避免该部分在测试中真正执行。例如:在控制器执行过程中会触发事件(Event),从而避免该事件在测试控制器时真正执行。这允许你在仅测试控制器 HTTP 响应的情况时,而不必担心触发事件。当然,你也可以在单独的测试中测试该事件逻辑。 Laravel 针对事件、任务和 Facades 的模拟,提供了开箱即用的辅助函

  • #使用Mocks测试 在现实世界的应用程序中,我们的组件很可能具有外部依赖性。当为组件编写单元测试时,如果我们可以模拟这些外部依赖性,以使我们的测试仅依赖于被测试组件的行为,这将是理想的。 vue-loader提供了一个特性,它允许你使用inject-loader向*.vue组件注入任意依赖项。一般的想法是,不是直接导入组件模块,我们使用inject-loader为该模块创建一个“模块工厂”函数。

  • 在我的代码中,我有时在同一个类中调用public或private方法。这些方法并不是一个很好的候选方法,不适合被拉入自己的类中。我调用的每个方法都在它们自己的单元测试中进行测试。 那么,如果我的类a中有一个方法也在类a中调用这些方法中的每一个,有没有办法模拟这些调用?我当然可以剪切和粘贴我的期望/模拟行为,但这不仅是一件乏味的事情,它混淆了测试的要点,违反了模块化,并且由于无法控制返回的内容,使测

  • 在我的代码中,我有时在同一个类中调用公共或私有方法。这些方法不适合被拉到自己的类中。我调用的这些方法中的每一个都是在它们自己的单元测试中进行测试的。 那么,如果我的类a中有一个方法,它也调用类a中的每个方法,那么有什么方法可以模拟这些调用吗?我当然可以剪切和粘贴我的期望/模拟行为,但这不仅是乏味的,它混淆了测试的重点,违反了模块化,并且由于无法控制返回的内容而使测试更加困难。 如果不是,这种事情通

  • 如何模拟集成测试所需的许多依赖关系? 我使用Mockito进行纯单元测试。在这种情况下,Pure意味着测试一个类,嘲笑它的所有依赖关系。漂亮。 现在是集成测试。假设在这种情况下,集成测试将测试以下内容: 消息被放入队列 我们也可以说,在第2步中发生的处理是严肃的事情。它依赖于大量的数据库交互、多种外部服务、文件系统,以及各种各样的东西。流还会引发很多副作用,所以我不能简单地确保响应是正确的——我需

  • 我正在试着用mockito测试我的缓存层。 我用的是这里描述的咖啡因 基本上,我有这个... 这工作得很好,方法被缓存并且工作得很好。