我刚刚通过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的情况相同。
答案 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)
}
这样,您可以编写仅专注于阅读的较小测试。