Пишу тест и пытаюсь имитировать интерфейс IMyResponse. Но после насмешки он возвращает int. Вот что я делаю:
public interface IMyResponse extends Serializable {
// ...
Object getResponseObject();
}
private IMyResponse myResponse;
@Before
public void setUp(){
myResponse = mock(IMyResponse.class);
}
@Test
public void mockTest(){
// myResponse.getResponseObject() is 0
when(myResponse.getResponseObject()).thenReturn("value");
// myResponse.getResponseObject() is 46
}
Что я делаю неправильно?
Вы аннотировали тестовый класс: @RunWith(MockitoJUnitRunner.class)?
@RunWith(MockitoJUnitRunner.class) public class MyResponseTest { private IMyResponse myResponse; @Before public void setUp(){ myResponse = mock(IMyResponse.class); } @Test public void mockTest(){ when(myResponse.getResponseObject()).thenReturn("value"); System.out.println(myResponse.getResponseObject()); } } работает отлично. Не уверен что ты делаешь
Я не могу предоставить более подробную информацию, потому что этот интерфейс является частью большой библиотеки. Когда я меняю этот интерфейс на дочерний класс, он работает правильно. может быть ты догадываешься, что может быть не так?
аннотация @RunWith (AndroidJUnit4.class)
Измените его на MockitoJUnitRunner и попробуйте еще раз
Это тест эспрессо, поэтому мне нужен @RunWith (AndroidJUnit4.class)
Хорошо, я думаю, вам не хватает аннотации @Mock до private IMyResponse myResponse;
Я добавил аннотацию, но она все та же
Удалите метод setUp и используйте только аннотацию Mock.
и ответ теперь нулевой




Помогла смена версии mockito (была 1.10):
androidTestImplementation 'org.mockito:mockito-android:2.15.0'
Спасибо, что предоставили такой ответ. Также отметьте это как решение, поставив отметку «принято».
[help-me]Очевидно, что все в порядке. Пожалуйста, предоставьте код, который мы можем запустить, чтобы воспроизвести проблему.