작은 데모 안드로이드 애플 리케이션에서 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!!)
}
난 내 코드가 최적보다 확신에 설치를 모의 sharedprefs
및 sharedpreferences.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()
}
예 아. 나는 지금 내가 한 것을 본다. 내 부분에 깎아 지른 멍청이! –