Как написать тестовые случаи для переключения состояния в Android Kotlin - PullRequest
0 голосов
/ 04 июня 2019

Мне нужно написать контрольный пример для условия переключения в kotlin.

Class.kt

fun getEnvSwitchURL(applicationContext: Context, envSwitchInfo: String): String {
        val resources = applicationContext.getResources()
        val assetManager = resources.getAssets()
        val properties = Properties()
        try {
            val inputStream = assetManager.open("configuration.properties")
            properties.load(inputStream)
            val urlPref = applicationContext.getSharedPreferences(SELECTED_ENV, Context.MODE_PRIVATE)
            val editor = urlPref.edit()
            when (envSwitchInfo) {
                "Production" ->{
                    editor.putString("selectedUrl", properties.getProperty("prodUrl"))
                    editor.apply()
                    selectedUrl=properties.getProperty("prodUrl")
                }
                "Development" ->{
                    editor.putString("selectedUrl", properties.getProperty("devUrl"))
                    editor.apply()
                    selectedUrl=properties.getProperty("devUrl")
                }
                "Testing" ->{
                    editor.putString("selectedUrl", properties.getProperty("testUrl"))
                    editor.apply()
                    selectedUrl=properties.getProperty("testUrl")
                }
            }
            inputStream.close()
        }
        return selectedUrl
    }

test.kt

@BeforeEach
    fun runBeforeTest() {

        testApplicationContext = Mockito.mock(Context::class.java)
        testResource = Mockito.mock(Resources::class.java)
        testAsset = Mockito.mock(AssetManager::class.java)
        testInputStream = Mockito.mock(InputStream::class.java)
        testSharedPref=Mockito.mock(SharedPreferences::class.java)
        testEditor=Mockito.mock(SharedPreferences.Editor::class.java)
        testProperties=Mockito.mock(Properties::class.java)
        testProperties.setProperty("prodUrl", "Value");
    }

@Test
    fun getEnvSwitchURL() {
        Mockito.`when`(testApplicationContext.getResources()).thenReturn(testResource)
        Mockito.`when`(testResource.assets).thenReturn(testAsset)
        Mockito.`when`(testAsset.open(Mockito.anyString())).thenReturn(testInputStream)
        PowerMockito.whenNew(Properties::class.java).withNoArguments().thenReturn(testProperties)
        Mockito.doNothing().`when`(testProperties).load(Mockito.any(InputStream::class.java))
        Mockito.`when`(testApplicationContext.getSharedPreferences(anyString(),anyInt())).thenReturn(testSharedPref)
        Mockito.`when`(testSharedPref.edit()).thenReturn(testEditor)
        envSwitchUtils.getEnvSwitchURL(testApplicationContext, testEnvSwitchInfo)
    }

Выше письменный тест-кейс работает нормально. Мне нужно выяснить, как написать контрольный пример для условия переключения для вышеуказанного класса. Пожалуйста, помогите мне написать то же самое

1 Ответ

0 голосов
/ 04 июня 2019

Я не ответил на ваш вопрос, но, возможно, рефакторинг вашего кода немного облегчает тестирование:

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...