当您的Android应用程序中的屏幕具有相机和/或图库功能以及某些屏幕更改 (出现/消失的视图,标签或按钮) 时,等等),你需要为这些功能/屏幕写一些浓缩咖啡测试,有几个我一直在使用的助手,我想和大家分享。授予许可当你在你的应用程序中使用相机时,您需要在设备中授予一些权限才能读取/存储照片。 这些权限在运行时被要求,通常与READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE相关。
因此,GrantPermissionRule允许在Android M (API 23) 及更高版本上授予运行时权限,并且当应用于测试类时,该规则尝试授予所有请求的运行时权限。@ get:Rulevar mRuntimePermissionRule = GrantPermissionRule.grant(android
Manifest.permission.WRITE_EXTERNAL_STORAGE) 此规则通常用于授予运行时权限,以避免权限对话框显示并阻止应用程序Ui,并且根据官方文档: 根据此规则,当WRITE_EXTERNAL_STORAGE被请求时,将自动授予READ_EXTERNAL_STORAGE。测试代码在应用程序中单击图库图标时进行测试,然后选择图像并在屏幕上显示: 这里的第一件事是我有一个帮助方法 (CameraAndGallery。
savePickedImage),首先保存一个图像 (为了简洁,ic_launcher图标),该图像将在测试中用作测试可见的本地文件: 活动参数来自ActivityTestRule:@ get:Rulevar mActivityTestRule = IntentsTestRule(MyActivity::class.java),然后我创建一个ActivityResult对象 (就像一个模拟但用于Android意图),该对象将由浓缩咖啡意图匹配器使用 (以匹配和验证传出的意图):val imgGalleryResult = CameraAndGallery.createImageGallerySetResultStub(mActivityTestRule
活动) 意图 (hasAction(Intent.ACTION_CHOOSER)).Respondwing (imgGalleryResult) 这里的秘密是要求先前保存并最终用作结果的文件。
注意: 要使用浓缩咖啡意图,我们必须将此依赖项添加到应用程序构建中。 gradle文件: androidTestImplementation androidx.test.
espresso:espresso-意图: $ espresssoversion对于我们正在编写的测试,让我们假设从图库中提取的图像,我们将其设置在用户可见的ImageView中,然后测试的最后一部分是检查图像是否显示 (方法hasImageSet()):onView (与id (R.id.auctionphotos_bigimage_viewer))。
检查 (匹配 (hasImageSet() 相机测试与图库测试类似,从设备相机获取图像的测试遵循几乎相同的步骤,但在这种情况下,图像不需要之前保存,只需模拟相机的结果: 模拟捕获结果如下: 生成的图像将由意图拍摄: 意图 (hasAction(MediaStore。 ACTION_IMAGE_CAPTURE)). 响应 (imgCaptureResult),并且我们可以检查图像是否已拍摄并显示: onView(withId(R。
id.auctionphotos_bigimage_viewer))。检查 (匹配 (hasImageSet() 最后,如果你想探索更多关于浓缩咖啡测试和意图的内容,你可能想看看这个官方安卓团队的回购