我刚刚通过官方文档来测试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)
}
这样,您可以编写仅关注阅读的较小测试。