片段测试,我缺少相当于 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
我习惯于在 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