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

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

朋友们下午好!

我有一个带有数据存储的数据源(代码如下)。 我不知道如何正确编写 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)
        }
    }
}
android kotlin mockito android-testing
1个回答
0
投票

您需要模拟

dataStore.data
,使用以下代码:

val key = booleanPreferencesKey("isWizardComplete")
Mockito.`when`(dataStore.data).thenReturn(
    flowOf(
        preferencesOf(
            key to true
        )
    )
)
© www.soinside.com 2019 - 2024. All rights reserved.