I was very surprised to find out that following simple code example doesn't work for all Mockito versions > 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{}
}
In javadocs (http://docs.mockito.googlecode.com/hg/latest/org/mockito/InjectMocks.html) there is a quote:
Note 1: If you have fields with the same type (or same erasure), it's better to name all @Mock annotated fields with the matching fields, otherwise Mockito might get confused and injection won't happen.
Does it mean that if I have several fields with same type I can't mock ONLY ONE of them but rather should define @Mock
for ALL fields with same type?
Is it known limitation and is there any reason why it wasn't fixed yet?
It should be straightforward to match @Mock
by fields names, isn't it?