Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中结合模拟和DI?_Java_Unit Testing_Dependency Injection_Mocking - Fatal编程技术网

如何在java中结合模拟和DI?

如何在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框架(例如Spring或GUICE)

我是否必须用接口包装任何服务对象才能使DI框架工作

当我写UT时

我可以将模拟框架与之结合(例如mockito)吗

在结合模拟FW和DI FW时,有什么我应该注意的吗


我有点困惑,因为DI FW还打算将实现从PROD更改为false。否?

正如@BoristheSpider在评论中提到的,您不应该在单元测试期间启动Spring上下文。所以您需要自己将依赖项(伪造的或真实的)连接到测试对象中

一种可能的方法是使用Mockito框架的fieldinjection+@injection/@Spy/@Mock特性

使用spring的更好方法是使用构造函数注入。DI框架在连接和创建bean时没有使用反射

在单元测试中,您可以通过构造函数传递伪造的或真实的依赖项


我建议围绕构造函数和现场注入进行研究。您可以从我的博客开始:

No。DI框架在生产代码中注入依赖项。在测试代码中,您通常自己和手动执行此操作。当然,您可以将DI框架配置为在测试代码中注入不同的实现,但这通常被认为太重了。使用构造函数注入,您只需模拟依赖项并将其传递给CUT-Mockito有一个简化此过程的方法。TL;博士,多读点书。