会议室:测试DAO Apis的正确方法

时间:2019-02-28 08:31:19

标签: android android-room android-testing

我刚刚通过official docs来测试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。对于dao,应该直接使用SQLiteOpenHelper完成写入操作,以确保插入项目,并且我们的测试仅测试读取的api。

与我们要测试编写api的情况相同。

1 个答案:

答案 0 :(得分:0)

您总是可以在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)
}

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