Mockito, когда начинается фактический вызов метода Android UI Testing - PullRequest
2 голосов
/ 05 ноября 2019

У нас есть класс Configuration и класс LocalStorage. Конфигурация принимает экземпляр LocalStorage в конструкторе, LocalStorage принимает Context в конструкторе. Мы просто пытаемся начать с тестирования пользовательского интерфейса. Мы пытаемся сделать это

   private val localStorage = Mockito.mock(LocalStorage::class.java)

   // in our setup method
   Mockito.`when`(localStorage.getString(anyString())).thenReturn(str)

Здесь проблема в том, что getString() вызов метода начинает происходить сразу после запуска тестов. Мы даже еще не написали настоящий тест.

Версия Mockito для Android: 3.1.0

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Рассматривали ли вы использование альтернативного подхода?

doReturn(str)., когда (localStorage).getString(anyString())

(необходим импорт: import org.mockito.Mockito.doReturn)

0 голосов
/ 06 ноября 2019

Проблема была в том, что LocalStorage инициализировался нашим классом Application. Mock завершается ошибкой, когда зависимость уже инициализирована ранее. Решение - создать TestApplication с CustomAndroidJUnitRunner. Убедитесь, что зависимости предварительно не инициализированы и только инициализируют зависимости в соответствии с требованиями соответствующего теста.

0 голосов
/ 05 ноября 2019

Я думаю, что проблема может быть в пробных классах Kotlin во время тестов пользовательского интерфейса. Похоже, что вы используете плагин для Mockito, чтобы «открыть» классы.

Возможные решения:

  1. Сделать LocalStorage интерфейсом, а не классом. (5 принцип SOLID, абстракция / реализация). Ваша проблема может исчезнуть, потому что интерфейсы открыты по своей природе.
  2. Используйте библиотеку Mockk, чтобы издеваться над LocalStorage и другими классами. Эта структура лучше для Kotlin.
...