Ошибка Mockito Verify выдает (требуется, но не вызывается :) ошибку каждый раз, даже если был вызван поддельный метод

#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(собственный метод)