Java Mockito是否支持使用CDI';s实例<&燃气轮机;接口?

Java Mockito是否支持使用CDI';s实例<&燃气轮机;接口?,java,mockito,cdi,Java,Mockito,Cdi,我有一个包含以下代码的类: @Inject @Any private Instance<SomeInterface> SomeInterfaces; @Inject @任何 私有实例接口; 这使我可以迭代该接口的所有实现。 现在,我想测试这个,所以我声明了这些接口的一些@Mock,并想@将Mock注入到我的测试单元中。但这失败了 是否可以很好地完成类似的操作,或者我必须为实例创建一个@Mock,Mockito可以完成单元测试的全部工作。在这里,您想测试代码如何与CDI上下文集成=

我有一个包含以下代码的类:

@Inject
@Any
private Instance<SomeInterface> SomeInterfaces;
@Inject
@任何
私有实例接口;
这使我可以迭代该接口的所有实现。 现在,我想测试这个,所以我声明了这些接口的一些
@Mock
,并想
@将Mock
注入到我的测试单元中。但这失败了


是否可以很好地完成类似的操作,或者我必须为
实例创建一个
@Mock
,Mockito可以完成单元测试的全部工作。在这里,您想测试代码如何与CDI上下文集成=>您需要一个您使用的CDI上下文实例。当然,您可以要求Mockito注入一些mock,但这样您将测试Mockito内部注入系统,而不是您的CDI上下文。莫基托警告你:

Mockito不是一个依赖注入框架,不要期望这个速记工具注入一个复杂的对象图,无论是模拟/间谍还是真实对象


很好的一点,修改了标题我看到的唯一选择是在单元测试中使用完整的CDI并设置CDI上下文-这使得使用模拟实现变得更加困难,我真的不会在单元测试中使用。因此,沿着模拟的
实例
,所示的
@Spy
示例可能是您的最佳选择,因此您可以强制自己实现。否。一点也不。但好消息是,您只需要启动CDI容器,例如,使用Arquillian和mockito模拟您的实现,并添加到部署中。@KoosGadellaa从CDI的角度来看,模拟bean的方法是使用
@Alternative
。这样,您就可以使用具有相同上下文和所有内容的完整CDI容器。只有您选择的bean才会被您的替代实现(例如mocked)所取代。如果你愿意,我可以详细说明一下。以下是一个观点,而不是答案的一部分:这就是为什么我更喜欢Spring而不是JavaEECDI上下文的原因之一:前者现在提供了所有工具,可以使用真正的Spring应用程序上下文轻松构建集成测试Good find Serge!(是的,到目前为止我同意,但在过去的5年里我一直在为spring编程,现在是时候看看另一面是什么样子了;)