![](/img/trans.png)
[英]How to test androidx (proto) datastore, java.lang.ExceptionInInitializerError
[英]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.