使用 bundle 启动 activity 时如何使用 ActivityTestRule?
How to use ActivityTestRule when launching activity with bundle?
我正在使用
val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, true)
并且 SingleFragmentActivity 是一个测试助手 activity class 我使用了 google GithubBrowseSample
如何使用捆绑包启动 activity?
您可以从 activityRule 中获取 activity 并且可以为 intent
设置额外的数据
activityRule.activity.intent.putExtra("key",value)
有两种方法可以实现您想要的效果。不幸的是,第一个需要创建自定义 ActivityRule
,这将覆盖某些方法。
第二种方法不需要覆盖 ActivityRule
:
但它需要将 false
作为 ActivityRule
构造函数 (launchActivity = false
) 的第三个参数传递。在你的情况下:
val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, false)
我建议使用第二种方法,因为这样可以很容易地将意图传递给 ActivityRule
,但需要在测试启动时手动启动 activity:
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
我正在使用
val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, true)
并且 SingleFragmentActivity 是一个测试助手 activity class 我使用了 google GithubBrowseSample
如何使用捆绑包启动 activity?
您可以从 activityRule 中获取 activity 并且可以为 intent
设置额外的数据activityRule.activity.intent.putExtra("key",value)
有两种方法可以实现您想要的效果。不幸的是,第一个需要创建自定义 ActivityRule
,这将覆盖某些方法。
第二种方法不需要覆盖 ActivityRule
:
但它需要将 false
作为 ActivityRule
构造函数 (launchActivity = false
) 的第三个参数传递。在你的情况下:
val activityRule = ActivityTestRule(SingleFragmentActivity::class.java, true, false)
我建议使用第二种方法,因为这样可以很容易地将意图传递给 ActivityRule
,但需要在测试启动时手动启动 activity:
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