首页 > 解决方案 > Kotlin - 替换类委托 - 具有相同功能的多个类不同的签名

问题描述

我正在使用 JunitRules RuleChain 和 Kotlin。我对两者都是新手,并且有两个类做完全相同的事情,唯一的区别是规则链。

第一堂课看起来像这样:

class BaseActivityTestRule<T : Activity>(
    private val activityRule : ActivityRule<T>
) : TestRule by RuleChain.outerRule(CustomRuleOne).around(activityRule) {

    // do something 
}

我需要另一个与委托完全相同BaseActivityTestRule但委托不同的类。

例子 :

class ExtendedActivityTestRule<T : Activity>(
    private val activityRule : ActivityRule<T>
) : TestRule by RuleChain.outerRule(CustomRuleOne).around(CustomRuleTwo).around(activityRule) {

    // do something 
}

如何在不复制代码块的情况下完成此操作?

标签: kotlindelegationjunit-rule

解决方案


只需将布尔参数传递给您的构造函数并使用它来创建基本或扩展TestRule

fun <T> createTestRule(activityRule: ActivityRule<T>, extended: Boolean) = 
    if(extended) 
        RuleChain.outerRule(CustomRuleOne).around(CustomRuleTwo).around(activityRule)
    else
        RuleChain.outerRule(CustomRuleOne).around(activityRule)

class ActivityTestRule<T : Activity>(
    private val activityRule : ActivityRule<T>,
    extended: Boolean = false
) : TestRule by createTestRule(activityRule, extended) {

    // do something 
}

推荐阅读