【发布时间】:2016-08-11 12:11:23
【问题描述】:
我有一个包含以下代码的类:
@Inject
@Any
private Instance<SomeInterface> SomeInterfaces;
这使我可以遍历该接口的所有实现。
现在,我想对此进行测试,因此我声明了这些接口中的一些@Mock,并希望将它们@InjectMocks 放入我的测试单元中。但这失败了。
是否可以很好地做类似的事情,或者我必须为Instance<SomeInterface>创建一个@Mock
【问题讨论】:
-
好点,修改了标题
-
我看到的唯一选择是在单元测试中使用完整的 CDI 并设置 CDI 上下文 - 这使得使用模拟实现变得更加困难,我真的不会在单元测试中去那里.因此,沿着模拟
Instance的路线,@Spy示例显示here 可能是您最好的选择,因此您可以强制执行自己的实现。 -
没有。一点也不。但好消息是,您只需启动 CDI 容器,例如,使用 Arquillian 和 Mock,您可以使用 mockito 实现并添加到部署中。
-
@KoosGadellaa 从 CDI 的角度来看,模拟 bean 的方法是使用
@Alternative。这样,您就可以使用具有相同上下文和所有内容的成熟 CDI 容器。只有您选择的 bean 会被您的替代实现(例如模拟)替换。如果您愿意,我可以详细说明。