java.lang.IllegalStateException: context.getSharedPrefere… EF, Context.MODE_PRIVATE) не должен быть нулевым - PullRequest
0 голосов
/ 02 июня 2018

Это мой класс пользователя

open class User(val context: Context) : Serializable {

@SerializedName("token")
var tokenFromServer: String = ""
var tokenSharedPreferences: SharedPreferences =context.getSharedPreferences(Constants.USER_TOKEN_PREF, Context.MODE_PRIVATE)

@SerializedName("registered_token")
var token: String = ""
    set(userNewToken) {
        field = userNewToken
        with(tokenSharedPreferences.edit()) {
            putString(Constants.TOKEN_KEY, userNewToken).commit()
        }
        checkLogin() // 토큰이 설정 되면 로그인 상태 변경해준다
    }

fun checkLogin(): Boolean {
    with(context.getSharedPreferences(Constants.USER_TOKEN_PREF, Context.MODE_PRIVATE).getString(Constants.TOKEN_KEY, Constants.EMPTY_TOKEN)) {
        if (this == Constants.EMPTY_TOKEN) return false else return true
    }
    return false
}
}

Это мой тестовый код

 @RunWith(MockitoJUnitRunner::class)
 class UserModelTest : InstrumentationTestCase() {

private val TEST_TOKEN_FROM_SERVER = "token"

@Mock
private lateinit var mockUserModel: User
private lateinit var realUserModel: User
var testContext = mock(Context::class.java)

@Before
fun initMocks() {
    testContext = MockContext()
    mockUserModel = User(testContext)
    realUserModel = User(testContext)


    given(realUserModel.tokenSharedPreferences.getString(eq(Constants.TOKEN_KEY), anyString()))
            .willReturn(realUserModel.token)

}
}

Я получил "java.lang.IllegalStateException: context.getSharedPrefere… EF, Context.MODE_PRIVATE)не должно быть нулевым "это сообщение об ошибке.

1 Ответ

0 голосов
/ 02 июня 2018

Ваш код context.getSharedPreferences(Constants.USER_TOKEN_PREF, Context.MODE_PRIVATE) возвращает значение NULL, поэтому переменная для хранения этого значения должна иметь значение NULL:

var tokenSharedPreferences: SharedPreferences? =context.getSharedPreferences(Constants.USER_TOKEN_PREF, Context.MODE_PRIVATE)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...