#android #unit-testing #mockito #android-room
#Android #модульное тестирование #mockito #android-room
Вопрос:
Я издеваюсь над Dao, который внедряется в класс репозитория, который я тестирую. При использовании Mockito.verify (MyDao) он отлично работает вне класса репозитория. Когда я его использую, он сообщает, что метод был вызван один раз, именно то, что я ожидал. Однако внутри класса репозитория он всегда будет выдавать ошибку (требуется, но не вызывается 🙂
Что странно, так это Mockito. when
() отлично работает в классе репозитория, я знаю это, потому что я заполнил его инструкциями Log.d . Инструкции log.d показывают, что используется список, переданный с помощью Mockito. when
().thenreturn(myList). Это в репозитории. Однако, хотя я отчетливо вижу, что этот метод был вызван, Mockito.verify(), похоже, по-прежнему считает, что он никогда не вызывался.
@RunWith(MockitoJUnitRunner::class)
class RepositoryTests {
@InjectMocks
private lateinit var repos: Repository
@Mock
lateinit var mockedDao : MomentDao
@get:Rule
val activityRule = ActivityTestRule(MainActivity::class.java)
@get:Rule
val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Test
fun hardDaoTest() {
Mockito.`when`(mockedDao.findMomentsByBound(ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble(),
ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble())).thenReturn(momentList)
repos.queryMapMoments(LatLngBounds(LatLng(20.toDouble(), -40.toDouble()), LatLng(25.toDouble(), -30.toDouble())), zoom)
Mockito.verify(mockedDao, times(1)).findMomentsByBound(
ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble(),
ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble())
}
Итак, Mockito.when() работает нормально, и momentList содержится в репозитории, как и ожидалось. Mockito.verify каждый раз завершается с ошибкой.
Любая информация об этом была бы высоко оценена.
Это была ошибка.
Wanted but not invoked:
mockedDao.findMomentsByBound(
<any double>,
<any double>,
<any double>,
<any double>
);
-> at
com.example.barrechat108.RepositoryTests.hardDaoTest(RepositoryTests.kt:147)
На самом деле, с этим макетом не было никаких взаимодействий.
at
com.example.barrechat108.RepositoryTests.hardDaoTest(RepositoryTests.kt:147)
в java.lang.reflect.Method.invoke(собственный метод)