Я столкнулся с тем, что, по моему мнению, может быть ошибкой с Mockito, но задавался вопросом, может ли кто-нибудь еще пролить свет на то, почему этот тест не работает.
В принципе, у меня есть два объекта, например:
public class FirstObject {
private SecondObject secondObject;
public SecondObject getSecondObject() { return secondObject; }
}
public class SecondObject {
private String name;
public String getName() { return name; }
}
Первый объект издевается через аннотацию и метод before:
@Mock
FirstObject mockedFirstObject;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
Второй объект издевается по методу:
public SecondObject setupMockedSecondObject() {
SecondObject secondObject = Mockito.mock(SecondObject.class);
Mockito.when(secondObject.getName()).thenReturn("MockObject");
return secondObject;
}
Когда thenReturn
содержит прямой вызов этого метода для настройки и получения макета второго объекта, он терпит неудачу:
@Test
public void notWorkingTest() {
Mockito.when(mockedFirstObject.getSecondObject()).thenReturn(setupMockedSecondObject());
Assert.assertEquals(mockedFirstObject.getSecondObject().getName(), "MockObject");
}
Но, когда макет, возвращенный тем же методом, назначается локальной переменной, которая используется в thenReturn
, она работает:
@Test
public void workingTest() {
SecondObject mockedSecondObject = setupMockedSecondObject();
Mockito.when(mockedFirstObject.getSecondObject()).thenReturn(mockedSecondObject);
Assert.assertEquals(mockedFirstObject.getSecondObject().getName(), "MockObject");
}
Мы делаем что-то неправильно или это действительно ошибка/ограничение в Mockito? Есть ли умышленная причина, по которой это не работает?