如何在Android Espresso测试中测试setResult()?

如何在Android Espresso测试中测试setResult()?,android,android-testing,android-espresso,Android,Android Testing,Android Espresso,在Android Espresso测试中,有什么好方法可以测试结果代码和数据吗?我用的是浓缩咖啡2.0 假设我有一个名为BarActivity.class的活动,它在执行某些操作时,使用适当的负载调用setResult(int-resultCode,Intent-data) 我想编写一个测试用例来验证resultCode和数据。但是,因为setResult()是一个final方法,所以我不能重写它 我想到的一些选择是: 定义一个新的方法,比如setActivityResult(),然后使用它来

在Android Espresso测试中,有什么好方法可以测试结果代码和数据吗?我用的是浓缩咖啡2.0

假设我有一个名为
BarActivity.class
活动
,它在执行某些操作时,使用适当的负载调用
setResult(int-resultCode,Intent-data)

我想编写一个测试用例来验证
resultCode
数据
。但是,因为
setResult()
是一个
final
方法,所以我不能重写它

我想到的一些选择是:

  • 定义一个新的方法,比如
    setActivityResult()
    ,然后使用它来拦截它,等等
  • 编写一个仅测试的TestActivity,该TestActivity将在
    BarActivity
    上调用
    startActivityForResult()
    ,并在
    TestActivity.onActivityResult()中检查结果

试着想想这两个坏处中哪一个比较小,或者是否有其他关于如何测试这一点的建议。有什么建议吗?谢谢

如果您愿意升级到2.1,请查看:

使用预期的API(Mockito.when的表亲),您可以为使用startActivityForResult启动的活动提供响应

这基本上意味着可以在启动特定活动时构建并返回任何结果(在您的案例中是BarActivity类)

请在此处检查此示例:


还有一个类似的问题(但与contact picker活动有关),其中我展示了如何构建结果并将其发送回名为startActivityForResult()的活动,如果同时切换到最新的3.0.1版浓缩咖啡,您只需使用
ActivityTestRule
即可获得如下活动结果:

assertThat(rule.getActivityResult(), hasResultCode(Activity.RESULT_OK));
assertThat(rule.getActivityResult(), hasResultData(IntentMatchers.hasExtraWithKey(PickActivity.EXTRA_PICKED_NUMBER)));
您可以找到一个工作示例。

这对我很有用:


@试验
有趣的测试活动Forresult(){
//生成启动活动时返回的结果。
val resultData=Intent()
resultData.putExtra(键值到返回值,true)
//当意向发送到时设置结果存根,并且我必须在上面链接的末尾检查此链接
和

我不知道如何用意式浓缩咖啡测试setResult方法。你能澄清一下吗?这里有一个选项2的特殊解决方案:但是,不完整,至少我没有成功地使它工作。只要你能转到3.0.1,这绝对是最干净的方法。如果
hasResultCode
hasResultData
无法解决。添加
androidTestCompile'com.android.support.test.espresso:espresso contrib:3.0.1'
in build.gradley你救了我一天。谢谢!