Я пытаюсь смоделировать мою базу данных комнат с помощью Mockito, чтобы я мог проверить сложные алгоритмы в моем репозитории. Я получаю множество различных ошибок, независимо от того, в каком направлении я вступаю.
Сначала я попробовал просто выполнить Mocking всего объекта базы данных, это создало исключение нулевого интерфейса.
Чтобы решить эту проблему, я использовал построитель статических объектов в Комнате. (Это инструментальный модульный тест, поэтому у меня есть доступ к основным зависимостям Android)
import org.mockito.*
import org.mockito.Mockito.`when`
import org.mockito.Mockito.anyDouble
class BasicReposTest {
@get:Rule
val activityRule = ActivityTestRule(MainActivity::class.java)
@get:Rule
val mockitoRule: MockitoRule = MockitoJUnit.rule()
@Mock
lateinit var mockedDb : AppDatabase
@Before
fun setTheDatabase() {
val context = ApplicationProvider.getApplicationContext<Context>()
mockedDb = Room.inMemoryDatabaseBuilder(
context, AppDatabase::class.java).build()
}
@Test
fun doesReposRequestBounds() {
`when`(mockedDb.momentDao().findMomentsByBound(ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble(),
anyDouble(), ArgumentMatchers.anyDouble())).thenReturn(momentList)
//Request first set of moments
repos.queryMapMoments(bounds, 20.toFloat())
//Do we get a list of moments sent to livedata?
assertTrue(mappedMoments.value!!.size >= momentList.size)
val list : List<Moment> = mappedMoments.value!!
for (value in list) {
System.out.println("D " + "RequestMomentsFromDatabaseByBoundsTest " + "MID = " + value.mId )
}
}
При этом я получаю исключение при неправильном использовании ...
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Обнаружено неуместное или неправильно использованное сопоставление аргументов:
-> at com.example.barrechat108.RepositoryTests.doesReposRequestBounds (RepositoryTests.kt: 138)
-> at com.example.barrechat108.RepositoryTests.doesReposRequestBounds (RepositoryTests.kt: 138)
-> at com.example.barrechat108.RepositoryTests.doesReposRequestBounds (RepositoryTests.kt: 139)
-> at com.example.barrechat108.RepositoryTests.doesReposRequestBounds (RepositoryTests.kt: 139) `
Вы не можете использовать сопоставления аргументов вне проверки или заглушки.
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++