【问题标题】:Return from Android Gallery in jUnit?从 jUnit 中的 Android 库返回?
【发布时间】:2013-04-23 05:47:08
【问题描述】:

我有一个应用程序,如果您单击一个按钮,它会打开 Android Gallery 应用程序。然后用户可以为我的应用程序选择一个图像。问题是,如果我在 JUnit 中单击该按钮,它会打开画廊,然后就坐在那里。我必须手动选择一张图片。我只是希望能够打开图库然后返回,或者如果可能的话选择一张图片。

我尝试了几个选项,例如 -

sendKeys(KeyEvent.KEYCODE_BACK)
Robotiums goBack(), goBackToActivity(), sendKey() functions
Robotiums clickOnScreen() function to click and select an image

但这些似乎都不起作用。那我该怎么办?

【问题讨论】:

    标签: android android-activity junit gallery robotium


    【解决方案1】:

    我遇到了同样的问题。您不能这样做,因为 Android Gallery 是另一个在其自己的沙箱中运行的应用程序,您无法从测试代码中访问它。

    但是,我想出了以下解决方案。您可以构建自己的虚拟应用程序,为打开图像提供 Intent 过滤器。在这个应用程序中,您只需返回一个 ok 的意图。

    现在您只需在首次从测试应用程序中打开图像时选择您的应用程序作为默认应用程序。之后,一切都会自动运行。

    完成测试后,您可以在 Android 设备的设置中重置默认意图过滤器。

    我的解决方案的代码可以在这个讨论中找到:How to provide content for Intent.ACTION_GET_CONTENT

    【讨论】:

      【解决方案2】:

      可以模拟从图库返回的响应。 下面的代码 sn-p 完成所有工作。

      final Intent data = new Intent();
      data.setData(Uri.parse("content://media/external/images/media/458")); // put here URI that you want select in gallery
      Runnable runnable = new Runnable(){
          @Override
          public void run() {
              getActivity().onActivityResult(3333,-1, data);
              synchronized(this) {
                  this.notify();
              }
          }
      };
      synchronized(runnable) {
          getActivity().runOnUiThread(runnable);
          runnable.wait();
      }
      

      这种方法有两个缺点:

      1. 您的活动的 onActivityResult 方法应该是公开的,这会阻止封装。
      2. 测试实际上不会点击打开图库的按钮,并且不会执行 onClick 处理程序。

      但这种方法的好处是您无需构建模拟应用程序并更改 android 设置中的任何默认值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-22
        • 2021-05-08
        • 2011-07-11
        • 2020-07-08
        • 1970-01-01
        • 1970-01-01
        • 2012-02-07
        • 2020-09-10
        相关资源
        最近更新 更多