Open kostapostolakis opened 4 months ago
Calling the Settings()
factory function invokes SharedPreferences
APIs on Android, which aren't available in unit tests. Starting in 1.2 it will be possible to call SettingsInitializer().create(context)
with a robolectric or other mock Context
object for unit testing. Otherwise, you can inject a Settings
object rather than hardcoding the Settings()
call, and pass MapSettings()
in tests.
Calling the factory function invokes APIs on Android, which aren't available in unit tests. Starting in 1.2 it will be possible to call with a robolectric or other mock object for unit testing. Otherwise, you can inject a object rather than hardcoding the call, and pass in tests.
Settings()``SharedPreferences``SettingsInitializer().create(context)``Context``Settings``Settings()``MapSettings()
Hey guys,
I didn't quite understand the answer. In my case, I'm doing unit testing at CommonMainTest in KMP(old KMM). I tried using KoinTest and Mockative and both returned the same error presented initially.
@russhwolf could you explain better how to resolve this issue when testing?
Is there a timeframe for when 1.2 would be released?
1.2 is now out. You can now do something like this in a test
val context: Context = ...
SettingsInitializer().create(context)
val settings = Settings()
// do something with settings
Alternatively, make your helper class injectable:
class SettingsHelper(val settings: Settings = Settings()) {
companion object {
// User Data
const val USER_NAME = "userName"
}
var userName: String?
get() { return settings.getStringOrNull(USER_NAME) }
set(value) { settings[USER_NAME] = value }
}
then you can do SettingsHelper(MapSettings())
in your tests.
Hello, I have created this helper to save userName in Settings. I get and set the details in some viewModels.
I created the following unit test:
And I get this error:
How can I use the helper in Unit Testing?