【发布时间】:2020-09-08 13:04:57
【问题描述】:
TestSomething.class :
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "application-context-junit" })
public class TestSomething {
@Autowired
ISomeService someService;
...// more code
}
SomeServiceImpl.class :
@Service("someService")
public class SomeServiceImpl implements ISomeService{
@Autowired
ISomeAnotherService someAnotherService;
..//more code
}
application-context-junit.xml:
<context:component-scan base-package="com.basepackage.*" />
所以,我的问题是 如果我在 application-context-junit.xml 中提供组件扫描来处理所有 Autowires 是否足够,或者我是否也应该在 xml 中添加以下内容?
<context:component-scan base-package="com.basepackage.*" />
<bean id="someService" class=""com.basepackage.SomeServiceImpl"" />
<bean id="someAnotherService" class=""com.basepackage.SomeAnotherServiceImpl"" />
【问题讨论】:
-
为什么要使用单独的配置进行测试,而不是使用现有的配置?如果服务被注释,您只需要组件扫描。但是,如果您只想测试服务(并且实际上并不需要 spring),那么只需创建一个服务实例并自己注入它们。
-
@M.Deinum 感谢您的回复。我创建了单独的配置只是为了理解。我要测试的服务中有很多自动连接。所以我这里需要春天
-
它应该只适用于组件扫描,前提是您的
ISomeAnotherService的 impl 也被正确注释,例如与@Component或@Service或类似。一句忠告;避免使用大型测试上下文,因为这些会成为它们自己的维护负担,并且会很快变得复杂。我发现其他项目正在针对存根运行测试,并因此天真地通过了。
标签: java spring junit autowired applicationcontext