Я был очень удивлен, узнав, что следующий простой пример кода не работает для всех версий 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 соответствующими полями, иначе Мокито может запутаться, и инъекции не произойдет.
Означает ли это, что если у меня есть несколько полей с одним и тем же типом, я не могу имитировать ТОЛЬКО ОДИН из них, а должен определять @Mock
для полей ВСЕ с тем же типом?
Известно ли это ограничение и есть ли причина, почему он еще не исправлен?
Это должно быть просто, чтобы соответствовать @Mock
по именам полей, не так ли?