如何检查 intent (activity) 的包名称 (Espresso) 中是否包含字符串?

How to check if intent (activity) contains string in it's package name (Espresso)?

我使用 UI 测试来测试我的应用程序,并想检查相机应用程序是否打开。

我已经这样做了:

  @Test
  public void profileImageClickOpensCamera() {

        mIntentsRule.getActivity().startActivity(new Intent(mIntentsRule.getActivity(), ProfileActivity.class));

        onView(withId(R.id.circleProfileImage)).perform(click());
        intended(toPackage("com.android.camera"));

    }

它在大多数设备上工作正常s,但是如果我在 SAMSUNG Galaxy S8 上下雨,它有 "com.sec.android.app.camera" 相机包应用程序,测试失败。

我的问题是,我如何检查 espresso 包装中是否包含单词 "camera"?

这不是最佳解决方案,因为设备的相机应用程序包名称可以是任何名称,但比我所知道的更好。

所以我想做这样的事情:

intended(StringContains(toPackage("com.android.camera")));

有什么建议吗?

提前致谢。

我也遇到过同样的情况,我是这样解决的:

PackageManager packageManager = InstrumentationRegistry.getTargetContext().getPackageManager();
        String pack = resultData.resolveActivity(packageManager).getPackageName();

intended(toPackage(pack));

在我的情况下,我有一个 activity,带有一个按钮,可以打开相机,让您拍照并 returns 在您的 activity 中使用它。该测试的完整代码为:

@Test
public void testCameraIntent() {
        Bitmap icon = BitmapFactory.decodeResource(
                InstrumentationRegistry.getTargetContext().getResources(),
                R.drawable.husky);

        // Build a result to return from the Camera app
        Intent resultData = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        resultData.putExtra("data", icon);
        Instrumentation.ActivityResult result = new Instrumentation.ActivityResult(Activity.RESULT_OK, resultData);

        PackageManager packageManager = InstrumentationRegistry.getTargetContext().getPackageManager();
        String pack = resultData.resolveActivity(packageManager).getPackageName();

        // Stub out the Camera. When an intent is sent to the Camera, this tells Espresso to respond
        // with the ActivityResult we just created
        intending(toPackage(pack)).respondWith(result);

        // Now that we have the stub in place, click on the button in our app that launches into the Camera
        onView(withId(R.id.btn_takePicture)).perform(click());

        intended(toPackage(pack));
    }

这就是结果 :-) 带有哈士奇狗的图像是我设置为在我的自定义 ActivityResult 中发送的本地图像:

您可以测试意图操作而不是包。

intended(hasAction(MediaStore.ACTION_IMAGE_CAPTURE))intended(hasAction(equalTo(MediaStore.ACTION_IMAGE_CAPTURE))) 之类的东西应该可以。