我正在尝试使用Mockito模拟房间数据库,以便可以在存储库中测试复杂的算法。无论我朝哪个方向前进,我都会遇到很多不同的错误。

首先,我尝试仅模拟整个数据库对象,这创建了一个空接口(interface)异常。

为了解决这个问题,我使用了Room的静态对象生成器。 (这是一个仪器化的单元测试,因此我可以访问底层的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:
在此处检测到错误或错误使用的参数匹配器:

-> com.example.barrechat108.RepositoryTests.doesReposRequestBounds(RepositoryTests.kt:138)
-> com.example.barrechat108.RepositoryTests.doesReposRequestBounds(RepositoryTests.kt:138)
-> com.example.barrechat108.RepositoryTests.doesReposRequestBounds(RepositoryTests.kt:139)
-> com.example.barrechat108.RepositoryTests.doesReposRequestBounds(RepositoryTests.kt:139)处`

您不能在验证或存根之外使用参数匹配器。
++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++

最佳答案

测试时,您可以将 session 室数据库构造为内存数据库。因此,所有存储的内容将一直持续到该过程关闭为止。因此,任何东西都不会持久,非常适合测试!

码:Room.inMemoryDatabaseBuilder(context, TestDatabase::class.java).build()

07-24 12:53