【发布时间】:2015-07-09 05:39:43
【问题描述】:
我很惊讶地发现以下简单的代码示例不适用于所有 Mockito > 1.8.5 版本
@RunWith(MockitoJUnitRunner.class)
public class MockitoTest {
@Mock(name = "b2")
private B b2;
@InjectMocks
private A a;
@Test
public void testInjection() throws Exception {
assertNotNull(a.b2); //fails
assertNull(a.b1); //also fails, because unexpectedly b2 mock gets injected here
}
static class A{
private B b1;
private B b2;
}
interface B{}
}
在 javadocs (http://docs.mockito.googlecode.com/hg/latest/org/mockito/InjectMocks.html) 中有一个引用:
注意 1:如果您有相同类型(或相同擦除)的字段,则为 最好用匹配字段命名所有 @Mock 注释字段, 否则 Mockito 可能会感到困惑并且不会发生注入。
这是否意味着如果我有多个具有相同类型的字段,我不能只模拟其中一个,而是应该为具有相同类型的 ALL 字段定义@Mock?
它是已知的限制吗?是否有任何原因尚未修复?
通过字段名称匹配@Mock 应该很简单,不是吗?
【问题讨论】:
标签: java unit-testing mockito inject