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

Spring Boot:将模拟Bean插入Camel处理器单元测试

慕河
2023-03-14

我在试图编写单元测试的Spring Boot应用程序中有一个Camel处理器。处理器类如下所示:

@Named
public class MyProcessor implements Processor {
    @Inject
    private MyService myService;

    @Override
    public void process(Exchange exchange) {
       ...
    }
}

我正在尝试将模拟MyService对象注入单元测试。

我试过这个:

@RunWith(CamelSpringRunner.class)
@SpringBootTest
public class MyProcessorTest {
    @TestConfiguration
    static class Config {
        @Autowired
        private MyProcessor myProcessor;

        @Bean
        CamelContextConfiguration myProcessorTestContextConfiguration() {
            return new CamelContextConfiguration() {
                @Override
                public void beforeApplicationStart(CamelContext camelContext) {
                    MyService myService = Mockito.mock(MyService.class);
                    camelContext.addService(myService);
                    ...

…但这似乎不起作用-MyService的非模拟实例被注入处理器。我认为问题是因为我的模拟服务对象是在Camel上下文中创建的,而不是通过Spring创建的。

任何人都可以就正确的方法提出建议吗?

提前感谢您的任何帮助。

共有1个答案

戚翰飞
2023-03-14

您可以使用< code>@MockBean用模拟替换SpringBootTest中的Bean

@SpringBootTest
...
@MockBean 
private MyService myService;

这将在Spring测试上下文中创建一个类型为< code>MyService的Mockito Mock,并(因此)将其注入到正常情况下会注入真实Bean的位置。

 类似资料:
  • 我有以下用例: 问题2:为什么如果我只使用构造函数而不使用@Autowired或者反之亦然,那么一切都能正常工作,因为我没有加载Spring上下文...我有单元测试...

  • 问题内容: 我想将Mockito模拟对象注入到Spring(3+)bean中,以进行JUnit的单元测试。我的bean依赖项当前是通过在私有成员字段上使用注释来注入的。 我考虑过使用,但是我希望注入的bean实例实际上是一个代理,因此没有声明目标类的私有成员字段。我不希望为依赖项创建一个公共的setter,因为我将纯粹出于测试目的而修改接口。 我遵循了Spring社区提供的一些建议,但是未创建该模

  • spring bean xml 有几个使用真实对象预先编写的测试用例。有没有办法我可以模拟这个类B,得到注入类A和模拟几个方法?我只想在我的测试用例中这样做,以便预先编写的测试用例不受影响?

  • 我的实现出了什么问题?谢谢

  • 我在尝试包装我的代码以用于单元测试时遇到了一些问题。问题是。我有接口IHttpHandler: 现在很明显,我将在Connection类中有一些方法,这些方法将从my后端检索数据(JSON)。但是,我想为这个类编写单元测试,显然我不想编写针对真实后端的测试,而是一个被嘲弄的测试。我曾尝试谷歌一个很好的答案,但没有很大的成功。我以前可以并且曾经使用过Moq来模拟,但是从来没有在像HttpClient

  • 遇到了另一个常见的问题,同时为Spring Batch编写单元测试和集成测试组件是如何模拟域对象。一个很好的例子是StepExecutionListener,如下所示: public class NoWorkFoundStepExecutionListener extends StepExecutionListenerSupport { public ExitStatus afterSte