Мокинг интерфейса работает некорректно

Пишу тест и пытаюсь имитировать интерфейс 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
}

Что я делаю неправильно?

[help-me] Очевидно, что все в порядке. Пожалуйста, предоставьте код, который мы можем запустить, чтобы воспроизвести проблему.
user3458 08.06.2018 16:35

Вы аннотировали тестовый класс: @RunWith(MockitoJUnitRunner.class)?

Iker Obregon Reigosa 08.06.2018 16:36
@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()); } } работает отлично. Не уверен что ты делаешь
pvpkiran 08.06.2018 16:37

Я не могу предоставить более подробную информацию, потому что этот интерфейс является частью большой библиотеки. Когда я меняю этот интерфейс на дочерний класс, он работает правильно. может быть ты догадываешься, что может быть не так?

Rainmaker 08.06.2018 16:37

аннотация @RunWith (AndroidJUnit4.class)

Rainmaker 08.06.2018 16:37

Измените его на MockitoJUnitRunner и попробуйте еще раз

Iker Obregon Reigosa 08.06.2018 16:39

Это тест эспрессо, поэтому мне нужен @RunWith (AndroidJUnit4.class)

Rainmaker 08.06.2018 16:42

Хорошо, я думаю, вам не хватает аннотации @Mock до private IMyResponse myResponse;

Iker Obregon Reigosa 08.06.2018 16:47

Я добавил аннотацию, но она все та же

Rainmaker 08.06.2018 16:50

Удалите метод setUp и используйте только аннотацию Mock.

Iker Obregon Reigosa 08.06.2018 16:53

и ответ теперь нулевой

Rainmaker 08.06.2018 16:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
11
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Помогла смена версии mockito (была 1.10):

androidTestImplementation 'org.mockito:mockito-android:2.15.0'

Спасибо, что предоставили такой ответ. Также отметьте это как решение, поставив отметку «принято».

Timothy Truckle 09.06.2018 19:01

Другие вопросы по теме

Пакет для тестового класса возвращает основной пакет в Xcode 10, а не пакет модульных тестов
Интеграционный тест в библиотеке с использованием тестов пользовательского интерфейса или фреймворка модульного тестирования?
Как издеваться над ResultSet, чтобы не возвращать null в JUnit и Mockito
В чем разница между should.throw (), should.Throw () и expect to.throw ()?
Как вы имитируете Firebase SDK при тестировании создателей действий в Redux?
TypeError: невозможно прочитать свойство prod_id из undefined
Стоимость настройки тестов в JUnit - использование имитированных объектов по сравнению с тестами репозитория в устаревшем коде
Модульные тесты для снижения производительности в R
Как установить флажок при тестировании, если он установлен по умолчанию?
Облачная функция Firebase - модульное тестирование - укажите приложение Firebase в конструкторе для DataSnapshot, чтобы использовать метод .ref