我正在使用
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