首页 > 解决方案 > Android Mockito - 模拟枚举?

问题描述

我正在尝试测试一种在给定字符串列表时返回枚举列表的方法。

这是枚举

enum class SupportedFeatures(val id: String) {
    FEATURE_1("feature1"),
    ;

    companion object {
        fun getValueFromId(id: String): SupportedFeatures? {
            values().forEach {
                if (it.id == id) {
                    return it
                }
            }

            return null
        }
    }
}

这是我正在尝试测试的方法

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
fun getFilteredList(from: List<String>): MutableList<SupportedFeatures> {
    val to = mutableListOf<SupportedFeatures>()
    from.forEach {
        val supportedFeature = SupportedFeatures.getValueFromId(it)
        if (supportedFeature != null) {
            to.add(supportedFeature)
        }
    }
    return to
}

我可以很容易地测试这个

featuresList.addAll(listOf("feature1", "feature2", "feature3"))
target = mutableListOf(SupportedFeatures.FEATURE_1)
Mockito.`when`(featureSelector.getFilteredList(featuresList)).thenReturn(target)

但问题是当我向SupportedFeatures枚举添加更多功能时。如果我添加FEATURE_2("feature2")到枚举中,测试会突然失败。虽然测试确实应该失败,但我想在不依赖当前业务逻辑的情况下测试方法的功能。

有没有办法SupportedFeatures在测试类中模拟枚举?还是我没有以某种方式将方法分成更小的部分?

先感谢您!

标签: androidunit-testingkotlinenumsmockito

解决方案


推荐阅读