Я не ответил на ваш вопрос, но, возможно, рефакторинг вашего кода немного облегчает тестирование:
private val SELECTED_ENV = "";
fun getEnvSwitchURL(applicationContext: Context, envSwitchInfo: String): String {
val resources = applicationContext.resources
val assetManager = resources.assets
val properties = Properties()
val selectedUrl: String
try {
val inputStream = assetManager.open("configuration.properties")
properties.load(inputStream)
val urlPref = applicationContext.getSharedPreferences(SELECTED_ENV, Context.MODE_PRIVATE)
val editor = urlPref.edit()
selectedUrl = get(envSwitchInfo, properties)
editor.putString("selectedUrl", selectedUrl)
editor.apply()
inputStream.close()
}
return selectedUrl
}
fun get(envSwitchInfo: String, properties: Properties): String {
when (envSwitchInfo) {
"Production" -> {
return properties.getProperty("prodUrl")
}
"Development" -> {
return properties.getProperty("devUrl")
}
"Testing" -> {
return properties.getProperty("testUrl")
}
else -> throw IllegalStateException("Unhandled environment $envSwitchInfo")
}
}
Вы могли бы сделать намного больше здесь, посмотрите на Принцип Единой Ответственности. Это начало, для модульного тестирования вы не хотите проверять, что SharePreferences работает правильно, потому что тогда вы тестируете платформу, а не свой код. Возможно, вы захотите проверить только то, что при прохождении среды типа «Производство» возвращается выбранный вами selectedUrl.
Проверка входов и выходов, как описано выше, будет выглядеть примерно так:
String url = envSwitchUtils.getEnvSwitchURL(testApplicationContext, "Production")
assertEquals(url, "http://myProdUrl")
и еще один тест
String url = envSwitchUtils.getEnvSwitchURL(testApplicationContext, "Development")
assertEquals(url, "http://myDevUrl")