对于给定的接口,我有两个实现,它们都使用@Component进行注释。
一个实现在src/main -> IImplementationCore.java中,另一个实现在src/test -> IImplementationTest.java中。
我在src/test中有一个测试类ABCTest.java,它用
@RunWith(SpringRunner.class),@SpringBootTest,@ContextConfiguration,@ComponentScan,@EnableAutoConfiguration
我希望这个ABCTest.java在运行测试时注入IImplementationCore。但它正在注射IImplementationTest.java。
包装结构:
- test
- package
- IImplementationTest.java - package2
- ABCTest.java我知道的解决办法:
在某种程度上,我不喜欢强制某些东西成为主要的,因为由于src/test中的某些bean冲突,它被注释为主要的,而不是由于核心实现中的一些真正的冲突。我还有别的选择吗?我要找的是,是否有一种方法只考虑src/main的bean,而不考虑src/test的bean?还是有更好的方法?
发布于 2022-03-15 09:04:49
您可以在实现中使用@Profile注释。只有当指定的配置文件/s当前处于活动状态时,它才会加载bean。
@Component
@Profile({"a", "b"})
public IImplementationCore implements YourInterface {
}以相同的方式指定用于测试实现的配置文件。
如果这个测试类非常具体,比如它是唯一需要实现核心的类,那么您可以在它上使用@ActiveProfiles来激活这个测试类与当前不同的配置文件。
//other annotations
@ActiveProfiles("a")
public TestClass {
}https://stackoverflow.com/questions/71479150
复制相似问题