我刚刚通过official docs测试android中的房间dao。
该页面上列出了一种方法:
@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是错误的 - 写入的那个或读取的那个。
我想如果我们想测试read api。 dao,write应该直接使用SQLiteOpenHelper
完成,以便保证插入一个项目,我们的测试只测试read api。
对于我们想要测试写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)
}
这样你就可以编写更小的测试,专注于只读。