使用bundle启动活动时如何使用活动测试规则?



我正在使用

val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, true)

和 SingleFragmentActivity 是我从 google GithubBrowseSample 中使用的测试助手活动类

如何使用捆绑包启动活动?

您可以从 activityRule 获取活动,并且可以为意图设置额外的数据

activityRule.activity.intent.putExtra("key",value)

有两种方法可以实现您想要的目标。不幸的是,第一个需要创建自定义ActivityRule,这将覆盖某些方法。

  • ActivityTestRule.html#getActivityIntent()

第二种方法不需要覆盖ActivityRule

  • ActivityTestRule.html#launchActivity(android.content.Intent)

但它需要将false作为构造函数(launchActivity = false(的第三个参数传递ActivityRule。在您的情况下:

val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, false)

我建议使用第二种方法,因为这样 意图可以很容易地传递给ActivityRule,但需要在测试启动时手动启动活动:

activityRule.launchActivity(
Intent(context, SingleFragmentActivity::class.java).apply {
/*put arguments */
}
)

您有 2 个选项。 首先:如果您希望在每次测试中都有相同的意图(例如,使用相同的附加内容(。

@get:Rule
var rule: ActivityTestRule<YourActivity> =
object : ActivityTestRule<YourActivity>(YourActivity::class.java) {
override fun getActivityIntent(): Intent {
val targetContext = InstrumentationRegistry.getInstrumentation().targetContext
return Intent(targetContext, YourActivity::class.java).apply {
putExtra("someString","string")
putExtra("someBoolean",true)
}
}
}

第二:如果您希望在每个测试中都有不同的意图(例如,使用不同的附加内容(:

@get:Rule
val rule = ActivityTestRule(YourActivity::class.java,
true,
false) // launch activity later -> if its true, the activity will start here
@Test
fun testFunction(){
val intent = Intent()
intent.putExtra("name",value)
intent.putExtra("someBoolean",false)
rule.launchActivity(intent)
}

来源: http://blog.sqisland.com/2015/04/espresso-21-activitytestrule.html

相关内容

  • 没有找到相关文章

最新更新