2017-01-08 1 views
2

작은 데모 안드로이드 애플 리케이션에서 Kotlin을 사용하기 시작합니다. 나는 Junit과 Mockito로 테스트하려고하는 sharedpreferences 헬퍼 클래스를 만들었습니다. 나는 도우미에 addPrefsValueString()를 호출 할 때nullpointerException sharedpreferences 도우미 클래스에서 테스트를 실행할 때

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", "") 
} 

} 

문제는 다음과 같습니다

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() 
} 
} 

여기 내 테스트 클래스 : 아래 내 sharedprefshelper입니다. 라인

편집!. putString (키, 값) .commit()

가 널 포인터 예외가 발생? 이유가 확실하지 않은가요? 나는 @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!!) 
    } 

난 내 코드가 최적보다 확신에 설치를 모의 sharedprefssharedpreferences.Edit을했습니다.

편집 :

가 여기에 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() 
} 

답변

3

당신은 당신의 모의 객체 (mockprefsedit)에, 아래의 호출에 대한 기대치를 설정해야합니다. 반환 된 객체도 마찬가지로 commit이 호출됩니다.

edit!!.putString(key, value) 

감사 스리 람

+0

예 아. 나는 지금 내가 한 것을 본다. 내 부분에 깎아 지른 멍청이! –

관련 문제