我已经创建了此自定义测试配置:
@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定义被视为替代。
有什么想法吗?
答案 0 :(得分:1)
如果从未调用过方法applicationDao()
,则意味着您的Spring Boot不会扫描RestTemplateTestConfiguration
所在的软件包。
最简单的解决方案是将配置移到与包含用@SpringBootApplication
注释的类的包相同的包(或其子包)下。
OBS:即使配置位于test
目录而不是main
中,此规则也适用。
另一种解决方案是在配置启动包中添加@ComponentScan
或在您的Spring Boot测试级别使用@Import(RestTemplateTestConfiguration.class)
。
建议: 对于您的问题,您可以使用:
@Mock
ApplicationDao applicationDao;
,并且如果您有另一项使用该服务的服务:
@InjectMock
MyService myService;