我正在尝试测试以下LocalDataSource函数,NameLocalData.methodThatFreezes
函数,但是它冻结了。我该如何解决?或如何以其他方式对其进行测试?要测试的类
class NameLocalData(private val roomDatabase: RoomDatabase) : NameLocalDataSource { override suspend fun methodThatFreezes(someParameter: Something): Something { roomDatabase.withTransaction { try { // calling room DAO methods here } catch(e: SQLiteConstraintException) { // ... } return something } } }
测试类
@MediumTest @RunWith(AndroidJUnit4::class) class NameLocalDataTest { private lateinit var nameLocalData: NameLocalData // creates a Room database in memory @get:Rule var roomDatabaseRule = RoomDatabaseRule() @get:Rule var instantTaskExecutorRule = InstantTaskExecutorRule() @Before fun setup() = runBlockingTest { initializesSomeData() nameLocalData = NameLocalData(roomDatabaseRule.db) } @Test fun methodThatFreezes() = runBlockingTest { nameLocalData.methodThatFreezes // test freezes } // ... others NameLocalDataTest tests where those functions been tested does not use // roomDatabase.withTransaction { } }
Gradle的文件配置
espresso_version = '3.2.0'
kotlin_coroutines_version = '1.3.3'
room_version = '2.2.5'
test_arch_core_testing = '2.1.0'
test_ext_junit_version = '1.1.1'
test_roboletric = '4.3.1'
test_runner_version = '1.2.0'
androidTestImplementation "androidx.arch.core:core-testing:$test_arch_core_testing"
androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version"
androidTestImplementation "androidx.test.ext:junit:$test_ext_junit_version"
androidTestImplementation "androidx.test:rules:$test_runner_version"
androidTestImplementation "androidx.test:runner:$test_runner_version"
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlin_coroutines_version"
我正在尝试测试以下LocalDataSource函数,NameLocalData.methodThatFreezes函数,但是它冻结了。我该如何解决?或如何以其他方式进行测试?要测试的类...
上次我为Room数据库编写测试时,我只是使用runBlock
,它对我有用...您可以看看this sample并检查它是否也对您有用吗?