使用Mockito测试首选项数据存储

xiozqbni  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(95)

下午好,朋友们!
我有一个DataSource和DataStore(代码如下)。我不知道如何正确地为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)
        }
    }
}
vmdwslir

vmdwslir1#

你需要模拟dataStore.data,使用以下代码:

val key = booleanPreferencesKey("isWizardComplete")
Mockito.`when`(dataStore.data).thenReturn(
    flowOf(
        preferencesOf(
            key to true
        )
    )
)

相关问题