Mockito @InjectMocks不适用于具有相同类型的字段
我非常惊讶地发现,以下简单的代码示例不适用于>1.8.5的所有Mockito版本。
@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可能会感到困惑,并且不会进行注入。
这是否意味着,如果我有多个具有相同类型的字段,我不能只模拟其中一个,而应该为具有相同类型的所有字段定义?它是否具有已知的限制,是否有任何原因尚未修复?按字段名称进行匹配应该很简单,不是吗?@Mock
@Mock