房间:测试DAO API的正确方法



我刚刚通过官方文档来测试Android的房间。

该页面上列出了一种方法:

@Test
    @Throws(Exception::class)
    fun writeUserAndReadInList() {
        val user: User = TestUtil.createUser(3).apply {
            setName("george")
        }
        userDao.insert(user)
        val byName = userDao.findUsersByName("george")
        assertThat(byName.get(0), equalTo(user))
    }

我在这里有疑问。

它不违反junit测试的原则,即每种方法都应孤立测试。

在这里,我们正在测试写和阅读。如果测试失败,我们不知道哪个API是货物的 - 读写的API或读取的API。

我想如果我们想测试读取API。在dao中,应使用SQLiteOpenHelper直接完成写入,以便插入项目和我们的测试只能测试读取API是很内gu的。

对于我们要测试Write API时的情况相同。

您总是可以在INIT方法中插入您要测试的任何对象,例如:

@Before
fun createDb() {
    val context = ApplicationProvider.getApplicationContext<Context>()
    db = Room.inMemoryDatabaseBuilder(
            context, TestDatabase::class.java).build()
    userDao = db.getUserDao()
    val user: User = TestUtil.createUser(3).apply {
        setName("george")
    }
    userDao.insert(user)
}

这样,您可以编写仅关注阅读的较小测试。

最新更新