繁体   English   中英

如何使用 Proto DataStore 进行单元测试?

[英]How can I unit test with Proto DataStore?

我正在尝试使用 Proto DataStore 测试 DataSource。

class PreferenceDataSource @Inject constructor(
    private val userPreferences: DataStore<UserPreferences>
) 

所以,我正在这样实施:

@RunWith(RobolectricTestRunner::class)
@ExperimentalCoroutinesApi
class PreferenceDataSourceTest {
    @get:Rule
    var instantExecutorRule = InstantTaskExecutorRule()

    private lateinit var prefDataSource: PreferenceDataSource

    @Before
    fun setUp(){
        Dispatchers.setMain(Dispatchers.Unconfined)
        MockKAnnotations.init(this, relaxed = true)
        val datastore = DataStore<UserPreferences>() // this doesn't work.
        prefDataSource = PreferenceDataSource(userPreferences = datastore)
    }

    @Test
    fun test() {

    }
}

如何使用 Proto DataStore 进行测试? 我的意思是,我不想伪造它,但想看看它是否真的也正确更新或删除。

这是我使用 Robolectric 的解决方案。

@ExperimentalCoroutinesApi
@RunWith(RobolectricTestRunner::class)
class PreferenceDataSourceTest {

    @get:Rule
    var instantExecutorRule = InstantTaskExecutorRule()

    private val context = InstrumentationRegistry.getInstrumentation().targetContext

    private lateinit var dataSource: PreferenceDataSource
    private lateinit var dataStore: DataStore<UserPreferences>

    @Before
    fun setUp() {
        Dispatchers.setMain(Dispatchers.Unconfined)
        dataStore = DataStoreFactory.create(
            serializer = UserPreferencesSerializer(),
            scope = CoroutineScope(Dispatchers.Unconfined + SupervisorJob()),
        ) {
            context.dataStoreFile("test_user_preferences.pb")
        }
        dataSource = PreferenceDataSource(userPreferences = dataStore)
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM