代码之家  ›  专栏  ›  技术社区  ›  Adam Varhegyi

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

  •  2
  • Adam Varhegyi  · 技术社区  · 8 年前

    我用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、 但是如果我把它放在三星Galaxy S8上 其摄像头应用程序的“com.sec.android.app.camera”包,测试失败。

    我的问题是,我怎么能用浓缩咖啡来确认 包装中包含“摄像头”一词?

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

    所以我想做一些类似的事情:

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

    有什么建议吗?

    提前谢谢。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Eduardo Herzer    8 年前

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

    类似于 intended(hasAction(MediaStore.ACTION_IMAGE_CAPTURE)) intended(hasAction(equalTo(MediaStore.ACTION_IMAGE_CAPTURE))) 应该有用。

        2
  •  1
  •   mbob    8 年前

    我也遇到过同样的情况,我成功地解决了这个问题:

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

    在我的情况下,我有一个活动,有一个按钮可以打开相机,让你拍照并在活动中返回。该测试的完整代码为:

    @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));
        }
    

    结果如下:-)Husky dog的图像是我设置在自定义活动中发送的本地图像结果: enter image description here