#android #kotlin #junit #mockito-kotlin
Вопрос:
У меня есть следующий тестовый класс:
@RunWith(MockitoJUnitRunner::class) class RegistrationDataProviderUnitTest { private val mMockContext: Context = mock { on { getString(R.string.is_device_registered_key) } doReturn "is_device_registered_key" on { getSharedPreferences( anyString(), anyInt() ) } doReturn mMockSharedPreferences } private val mMockSharedPreferences: SharedPreferences = mock { on { getBoolean( mMockContext.getString(R.string.is_device_registered_key), false ) } doReturn true on { edit() } doReturn mMockSharedPreferencesEditor } private val mMockSharedPreferencesEditor: SharedPreferences.Editor = mock() private val okHttpClient: OkHttpClient = mock() private val analyticsService: AnalyticsService = mock() private val mRegistrationDataProvider = RegistrationDataProvider(mMockContext, okHttpClient, analyticsService) @Test fun registrationDataProvider_CheckIfDeviceIsRegistered() { val success: Boolean = mRegistrationDataProvider.checkIfDeviceIsRegistered() MatcherAssert.assertThat( "Checking that we retrieved the value of the shared preference key for when device is registered", success ) } }
Я издеваюсь над контекстом и передаю фиктивные общие предпочтения при вызове getSharedPreferences.
Затем я передаю контекст в свой класс RegistrationDataProvider. Вот как выглядит этот урок:
class RegistrationDataProvider @Inject constructor( @ApplicationContext private val appContext: Context, private val okHttpClient: OkHttpClient, private val analyticsService: AnalyticsService ) { fun checkIfDeviceIsRegistered(): Boolean { println(appContext) val sharedPref = appContext.getSharedPreferences( appContext.getString(R.string.shared_preferences_key), Context.MODE_PRIVATE ) println(sharedPref) return sharedPref.getBoolean( appContext.getString(R.string.is_device_registered_key), false ) } }
Когда я звоню, я ожидаю mRegistrationDataProvider.checkIfDeviceIsRegistered()
, что используемые общие настройки являются экземпляром mMockSharedPreferences, однако все, что я получаю, равно нулю.
как вы можете видеть, в моей функции есть два оператора печати checkIfDeviceIsRegistered()
, в которых AppContext возвращает mMockContext, а SharedPref возвращает null.
Почему это возвращает значение null и как я могу изменить тест, чтобы он возвращал правильное значение?