nullPointerException на вспомогательном классе sharedpreferences При запуске теста

Я начинаю использовать Kotlin в небольшом демонстрационном приложении для Android. Я создал sharedpreferences помощник sharedpreferences который я пытаюсь проверить с помощью Junit и Mockito. Ниже приведен мой общий помощник:

 public class SharedPrefsHelperImp( cont : Context) : SharedPrefsHelper { val prefsname: String = "prefs" var prefs: SharedPreferences? = null var edit: SharedPreferences.Editor? = null init { prefs = cont.getSharedPreferences(prefsname, Context.MODE_PRIVATE) edit = prefs!!.edit() } override fun getPrefsStringValue(key: String) : String { return prefs!!.getString(key, "") } override fun addPrefsStringVal( key : String, value: String) { edit!!.putString(key, value).commit() } override fun getSharedPrefsBool(key : String): Boolean { return prefs!!.getBoolean(key, false) } override fun addSharedPrefsBool(key : String, value : Boolean) { edit!!.putBoolean(key, value).commit() } } 

вот мой тестовый класс:

 class SharedPrefsHelperImpTest { @Mock var cont : Context? = null @Mock var mockprefs : SharedPreferences? = null @Mock var mockprefsedit : SharedPreferences.Editor? = null var prefshelper : SharedPrefsHelper? = null @Before fun setUp() { //MockitoAnnotations.initMocks(this) cont = Mockito.mock(Context::class.java) mockprefs = Mockito.mock(SharedPreferences::class.java) mockprefsedit = Mockito.mock(SharedPreferences.Editor::class.java) `when`(cont!!.getSharedPreferences(anyString(), anyInt())).thenReturn(mockprefs!!) `when`(mockprefs!!.edit()).thenReturn(mockprefsedit!!) prefshelper = SharedPrefsHelperImp(cont!!) } @Test fun testNotNull(){ Assert.assertNotNull(cont) Assert.assertNotNull(mockprefs) Assert.assertNotNull(mockprefsedit) } @Test fun testItemAdded() { prefshelper!!.addPrefsStringVal("thing", "thing") verify(mockprefsedit)!!.putString(anyString(), anyString()) } @Test fun testGetString() { prefshelper!!.getPrefsStringValue("key") verify(mockprefs)!!.getString("key", "") } } 

Проблема возникает, когда я вызываю addPrefsValueString() в помощнике. линия

Редактировать !!. putString (ключ, значение) .commit ()

выбрасывает исключение нулевого указателя? не знаете почему? Я установил mock sharedprefs и sharedpreferences.Edit в методе тестового класса, аннотированный с помощью @Before (показано ниже)

 @Before fun setUp() { //MockitoAnnotations.initMocks(this) cont = Mockito.mock(Context::class.java) mockprefs = Mockito.mock(SharedPreferences::class.java) mockprefsedit = Mockito.mock(SharedPreferences.Editor::class.java) `when`(cont!!.getSharedPreferences(anyString(), anyInt())).thenReturn(mockprefs!!) `when`(mockprefs!!.edit()).thenReturn(mockprefsedit!!) prefshelper = SharedPrefsHelperImp(cont!!) } 

я уверен, что мой код менее оптимален.

РЕДАКТИРОВАТЬ:

Вот мое исправление для testItemAdded() . при первом вызове необходимо вернуть редактор макетных настроек.

 @Test fun testItemAdded() { `when`(mockprefsedit?.putString(anyString(), anyString())).thenReturn(mockprefsedit) `when`(mockprefsedit?.commit()).thenReturn(true) prefshelper!!.addPrefsStringVal("thing", "thing") verify(mockprefsedit)!!.putString(anyString(), anyString()) verify(mockprefsedit)!!.commit() } 

Вы должны установить ожидания для вызова ниже, на ваш макет объекта ( mockprefsedit ). Также для возвращаемого объекта, на который вызывается commit .

 edit!!.putString(key, value) 

спасибо Шрирам