如何在java中结合模拟和DI?
我想使用DI框架(例如Spring或GUICE) 我是否必须用接口包装任何服务对象才能使DI框架工作 当我写UT时 我可以将模拟框架与之结合(例如mockito)吗 在结合模拟FW和DI FW时,有什么我应该注意的吗如何在java中结合模拟和DI?,java,unit-testing,dependency-injection,mocking,Java,Unit Testing,Dependency Injection,Mocking,我想使用DI框架(例如Spring或GUICE) 我是否必须用接口包装任何服务对象才能使DI框架工作 当我写UT时 我可以将模拟框架与之结合(例如mockito)吗 在结合模拟FW和DI FW时,有什么我应该注意的吗 我有点困惑,因为DI FW还打算将实现从PROD更改为false。否?正如@BoristheSpider在评论中提到的,您不应该在单元测试期间启动Spring上下文。所以您需要自己将依赖项(伪造的或真实的)连接到测试对象中 一种可能的方法是使用Mockito框架的fieldinje
我有点困惑,因为DI FW还打算将实现从PROD更改为false。否?正如@BoristheSpider在评论中提到的,您不应该在单元测试期间启动Spring上下文。所以您需要自己将依赖项(伪造的或真实的)连接到测试对象中 一种可能的方法是使用Mockito框架的fieldinjection+@injection/@Spy/@Mock特性 使用spring的更好方法是使用构造函数注入。DI框架在连接和创建bean时没有使用反射 在单元测试中,您可以通过构造函数传递伪造的或真实的依赖项
我建议围绕构造函数和现场注入进行研究。您可以从我的博客开始:No。DI框架在生产代码中注入依赖项。在测试代码中,您通常自己和手动执行此操作。当然,您可以将DI框架配置为在测试代码中注入不同的实现,但这通常被认为太重了。使用构造函数注入,您只需模拟依赖项并将其传递给CUT-Mockito有一个简化此过程的方法。TL;博士,多读点书。