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

问题描述 投票:0回答:1

我刚刚通过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的情况也是如此。

android android-room android-testing
1个回答
1
投票

您始终可以在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)
}

这样你就可以编写更小的测试,专注于只读。

© www.soinside.com 2019 - 2024. All rights reserved.