Рассмотрим класс тестирования ниже:
@RunWith(MockitoJUnitRunner::class)
class DatabaseManagerTest {
private var someStringValue = "test"
private var mockDatabaseManager: DatabaseManager? = null
@Mock
internal var mockSharedPreferences: SharedPreferences? = null
@Mock
internal var mockEditor: SharedPreferences.Editor? = null
@Before
fun initMocks() {
mockDatabaseManager = createMockSharedPreference()
}
private fun createMockSharedPreference(): DatabaseManager {
`when`<String>(
mockSharedPreferences?.getString(
Matchers.eq(DatabaseManager.SOME_UNIQUE_KEY),
Matchers.anyString()
)
).thenReturn(someStringValue)
`when`(mockEditor?.commit()).thenReturn(true)
`when`<SharedPreferences.Editor>(mockSharedPreferences?.edit()).thenReturn(mockEditor)
return DatabaseManager(mockSharedPreferences!!)
}
@Test
fun sharedPreferencesHelperUpdateAndReadStoredInformation() {
val success = mockDatabaseManager?.insert(someStringValue)
assertThat(
"Checking that update method returns true",
success, `is`(true)
)
val savedSharedPreferenceEntry = mockDatabaseManager?.readSomeValue()
assertThat(
"Checking that value is stored correctly",
someStringValue,
`is`(equalTo(savedSharedPreferenceEntry))
)
}
}
Вот класс базы данных:
class DatabaseManager(private val preferences: SharedPreferences) {
companion object {
const val SOME_UNIQUE_KEY = "some_unique_key"
}
fun insert(response: String): Boolean {
try {
val editor = preferences.edit()
editor.putString(SOME_UNIQUE_KEY, response)
editor.apply()
} catch (e: Exception) {
e.printStackTrace()
}
return true
}
fun readSomeValue(): String? {
return try {
val someValue = preferences.getString(SOME_UNIQUE_KEY, null)
someValue
} catch (e: Exception) {
e.printStackTrace()
null
}
}
}
Когда используется старая библиотека Mockito (1.10.19), тест проходит.
При переключении mockito-core на 3.0.0 я получаю 2 устаревших предупреждения для: @RunWith(MockitoJUnitRunner::class)
и Matchers
. После разрешения этих двух устаревших предупреждений я ожидаю, что readSomeValue () вернет «test», но readSomeValue () вернет null
.
// testImplementation 'org.mockito:mockito-core:3.0.0'
testImplementation 'org.mockito:mockito-core:1.10.19'