片段测试,我缺少相当于 ActivityScenarioRule 的东西

Fragment testing, I'm missing something equivalent to ActivityScenarioRule

我习惯于在 Espresso 测试中启动包含它的 Activity 来测试我的片段。这一直工作得很好,我已经能够通过添加到 ActivityScenarioRule(或 IntentsTestRule)的一些测试规则(例如 OkHttpIdlingResourceRule)来控制测试 environment/execution,然后用于启动 Activity.

既然我正在转向单一 Activity 方法并同时使用导航组件,我想开始单独测试我的片段。但是,为了能够做到这一点,我需要与 Activity 测试中存在的片段测试类似的功能。 ActivityScenarioRule 实现了 TestRule,但 FragmentScenario 没有实现,也没有 FragmentScenarioRule。

我是不是漏掉了什么?

其实很简单。在测试活动时,我有一个基础测试 class 包含以下内容:

@Rule @JvmField
val activityRule: IntentsTestRule<*>

@Rule @JvmField
val chain: RuleChain

init {
    activityRule = IntentsTestRule(
            activityClass,
            true, // true if the Activity should be placed into "touch mode" when started
            false) // launchActivity

    var initChain = RuleChain.outerRule(firstRule)
            .around(OkHttpIdlingResourceRule())
            .around(activityRule) 

    for (rule in additionalTestRules) {
        initChain = initChain.around(rule)
    }

    chain = initChain
}

在测试中 Activity 以 activityRule.launchActivity(null) 启动 现在在测试 Fragments 时变成:

@Rule
@JvmField
val chain: RuleChain

init {
    var initChain = RuleChain.outerRule(firstRule)
            .around(OkHttpIdlingResourceRule())

    for (rule in additionalTestRules) {
        initChain = initChain.around(rule)
    }

    chain = initChain
}

在测试中使用 launchFragmentInContainer() 启动 Fragment