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

时间:2019-12-04 03:34:37

标签: spring-boot apache-camel

我正在尝试为之编写单元测试的Spring Boot应用程序中有一个骆驼处理器。处理器类如下所示:

@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 个答案:

答案 0 :(得分:0)

您可以使用@MockBean

用Mocks替换SpringBootTest中的Bean。
@SpringBootTest
...
@MockBean 
private MyService myService;

这会在Spring测试上下文中创建MyService类型的Mockito Mock,并(因此)将其注入通常会注入真实Bean的位置。