春季注入测试:未在测试中注入Bean

时间:2018-10-29 15:44:41

标签: spring-boot mockito

我已经创建了此自定义测试配置:

@TestConfiguration
public static class RestTemplateTestConfiguration {

    @Bean
    @Primary
    public static ApplicationDao applicationDao() {
        ApplicationDao mock = Mockito.mock(ApplicationDao.class);
        // some stuff code
        return mock;
    }
}

我已经在applicationDao上设置了一个断点,但是它从未到达过,因此永远不会注入模拟。

编辑

ApplicationDao是一个@Repository注释的类:

@Repository
public interface ApplicationDao extends MongoRepository<Application, String> {

那么,我该如何覆盖此@Repository注释的AplicationDao

当前,我在春季开始时收到此消息:

  

跳过[BeanMethod:name = applicationDao,declaringClass = net.gencat.transversal.espaidoc.functional.references.GroupReferencesTest $ RestTemplateTestConfiguration]的bean定义:已经存在bean'applicationDao'的定义。此顶级bean定义被视为替代。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果从未调用过方法applicationDao(),则意味着您的Spring Boot不会扫描RestTemplateTestConfiguration所在的软件包。

最简单的解决方案是将配置移到与包含用@SpringBootApplication注释的类的包相同的包(或其子包)下。

OBS:即使配置位于test目录而不是main中,此规则也适用。

另一种解决方案是在配置启动包中添加@ComponentScan或在您的Spring Boot测试级别使用@Import(RestTemplateTestConfiguration.class)

建议: 对于您的问题,您可以使用:

@Mock
ApplicationDao applicationDao;

,并且如果您有另一项使用该服务的服务:

@InjectMock
MyService myService;