朋友们下午好!
我有一个带有数据存储的数据源(代码如下)。 我不知道如何正确编写 isWizardComplete() 方法的测试,stateFlow == null。如何初始化stateFlow并正确编写测试?我将不胜感激任何帮助。
class InfoWizardDataSourceImpl(
private val dataStore: DataStore<Preferences>
) : InfoWizardDataSource {
private val stateFlow: Flow<Boolean> = dataStore.data
.map { preferences ->
preferences[IS_WIZARD_COMPLETE] ?: false
}
.......
override suspend fun isWizardComplete(): Boolean {
return stateFlow.first()
}
.......
}
class InfoWizardDataSourceImplTest : BaseCoroutinesTest() {
private val dataStore = mock(DataStore::class.java) as DataStore<Preferences>
private val infoWizardDataSourceImpl = InfoWizardDataSourceImpl(dataStore)
private val IS_WIZARD_COMPLETE = booleanPreferencesKey("isWizardComplete")
@Test
fun isWizardComplete() {
runCoroutineTest {
`when`(dataStore.data.map { it[IS_WIZARD_COMPLETE] }).thenReturn(flowOf(true))
val result = infoWizardDataSourceImpl.isWizardComplete()
assertTrue(result)
}
}
}
您需要模拟
dataStore.data
,使用以下代码:
val key = booleanPreferencesKey("isWizardComplete")
Mockito.`when`(dataStore.data).thenReturn(
flowOf(
preferencesOf(
key to true
)
)
)