Din*_*jit 3 robolectric android-room
如何在Roboeletric的帮助下对Room Database进行单元测试?
我不想做仪器测试。
据我所知,可以这样做
//@RunWith(AndroidJUnit4::class)
@RunWith(RobolectricTestRunner::class)
class WordDaoTest {
private lateinit var wordRoomDatabase: WordRoomDatabase
private lateinit var wordDao: WordDao
@get:Rule
var instantTaskExecutor = InstantTaskExecutorRule()
@Before
fun createDb() {
val context = InstrumentationRegistry.getInstrumentation().targetContext
wordRoomDatabase = Room.inMemoryDatabaseBuilder(context, WordRoomDatabase::class.java).allowMainThreadQueries().build()
wordDao = wordRoomDatabase.wordDao()
wordRoomDatabase.wordDao().insertAll(listOf<Word(Word("one"),Word("two"),Word("three"))
}
@After
fun closeDb() {
wordRoomDatabase.close()
}
@Test
fun testGetName() {
Assert.assertThat(getValue(wordDao.getAllLiveWords()).size, equalTo(3))
}
}
Run Code Online (Sandbox Code Playgroud)
似乎尽管在数据库的构建中需要allowMainThreadQueries()。
我不确定为什么每个人都可以在单元测试中进行测试然后在单元测试中进行测试,然后再将其添加到代码覆盖率中(也许其他人对此有所了解)
这段代码在Kotlin中,但是我确信它将转换为java。
然而,这是提供给我的,原因是为什么它不被视为最佳实践 https://developer.android.com/training/data-storage/room/testing-db
注意:尽管此设置允许您的测试非常快速地运行,但不建议这样做,因为在设备(以及用户设备)上运行的SQLite版本可能与主机上的版本不匹配。
| 归档时间: |
|
| 查看次数: |
802 次 |
| 最近记录: |