如何使用 Espresso 存根 Intent.createChooser Intent

2024-02-02

Problem

我的应用程序中有一张图像,并将其共享给任何其他可以处理图像共享的应用程序,并且该功能运行良好。

我正在编写一个 Espresso UI 测试来拦截意图并确保它具有正确的操作和附加功能,但似乎无法让它工作。

Code

这是创建意图时的代码:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, uri);
intent.setType(MediaType.PNG.toString());
startActivity(Intent.createChooser(intent, "send");

这是我在测试中尝试匹配意图的尝试,但未能找到匹配项:

Intents.init();
launchActivity(MyFragment.newIntent(getTargetContext());

Matcher<Intent> expectedIntent = allOf(
    hasAction(Intent.ACTION_CHOOSER),
    hasExtra(
        Intent.ACTION_SEND,
        hasExtra(Intent.EXTRA_STREAM, EXPECTED_SHARE_URI) // Expected URI has been copied from the extras 'uriString' value when debugging
    )
);
intending(expectedIntent).respondWith(new Instrumentation.ActivityResult(0, null));
MyScreen.clickShareButton(); // performs click on the share button
intended(expectedIntent);
Intents.release();

Error

IntentMatcher: (has action: is "android.intent.action.CHOOSER" and has extras: has bundle with: key: is "android.intent.extra.STREAM" value: is "[my uri appears here]")

附加信息

调试时,创建的 Intent 会产生带有操作“android.intent.action.CHOOSER”的 Intent,并且具有额外的类型 Intent、操作“android.intent.action.SEND”和类型“image/png” ,并且反过来还有一个额外的,一个带有 uriString 的 HierarchicalUri。

Summary

有人知道我做错了什么吗?我找不到一种方法将所有这些联系在一起并为此意图创建一个匹配器。任何帮助将不胜感激!


如果您在这一行遇到错误intended(expectedIntent)因为意图不符,可能是因为Intent.createChooser将您的意图作为带有密钥的额外数据Intent.EXTRA_INTENT。在您的情况下,您只需要为选择器提供一个额外的意图匹配器:

Matcher<Intent> intent = allOf(
    hasAction(Intent.ACTION_SEND),
    hasExtra(Intent.EXTRA_STREAM, EXPECTED_SHARE_URI)
);

Matcher<Intent> expectedIntent = allOf(
    hasAction(Intent.ACTION_CHOOSER),
    // Intent.createChooser put your intent with the key EXTRA_INTENT
    hasExtra(Intent.EXTRA_INTENT, intent)
);

intending(anyIntent()).respondWith(new Instrumentation.ActivityResult(0, null));

MyScreen.clickShareButton();

intended(expectedIntent);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Espresso 存根 Intent.createChooser Intent 的相关文章

随机推荐

  • 为什么我无法将间隔解析为 JPA 中的参数?

    我正在尝试选择时间戳间隔 Query value SELECT timestamp as time start timestamp interval 1 as time end FROM timestamp table nativeQuer
  • 如何在 Vue.js 2 中搜索多个字段

    我正在尝试搜索或过滤 3 个字段名字 姓氏 and email在我的 Vue js 2 应用程序中 据我了解 与 Vue 1 不同 Vue 2 没有内置的过滤器方法 因此我创建了一种自定义方法 该方法只能过滤一个字段 如何将其扩展到多个领域
  • CSS 转换后无法点击按钮

    我正在尝试制作一个带有立方体的 html 页面 所述立方体的每个面都有按钮 在默认面上 所有按钮都可以正常工作 但是 一旦我旋转立方体 新面就会失去所有交互性 HTML
  • 如何找到列表的众数?

    scala 集合中是否有一个函数可以查找列表中某个值的最大出现次数 假设我有一个清单 L List A B B E B E B B C E B output B 我可以编写一个模块来计算这个 但我希望已经有一个 scala 方式 或 sca
  • pytest中首先执行哪个文件?

    正在浏览一些有关的教程pytest 我了解到 python m pytest 该命令执行所有以前缀开头的文件test 以及哪些文件位于同一目录中的函数 但我的问题是 如果文件是 首先执行哪个文件test app id py test sum
  • 为什么 https 下载会暂停并显示 PAUSED_WAITING_TO_RETRY?

    我正在使用下载管理器 https developer android com reference android app DownloadManager html STATUS PAUSEDAndroid 中通过 https URL 下载文
  • 如何使 Tkinter 按钮命令起作用

    我有一个带有按钮的类 它在构建 gui 时自动运行命令 我不希望它这样做 但之后就不再工作了 我究竟做错了什么 内置命令 例如 endcommand 可以正常工作 相关摘录 忽略一开始的缩进问题 class GuiPart object d
  • 使用 iCloud 在多个设备之间同步核心数据

    已经有最近有很多讨论 http rms2 tumblr com post 46505165521 the gathering storm our travails with icloud sync关于 iCloud 和 Core Data
  • 寻找简单的 MVVM Light 示例

    我正在尝试学习 MVVM Light 并正在寻找一个很好的基本示例来显示模型以及如何加载不同的视图 我下载 MVVM Light 后看到的模板没有模型 只有一个视图 http www galasoft ch mvvm creating 当我
  • 表级备份

    如何在 MS SQL Server 2005 2008 中进行表级备份 转储 您不能使用BACKUP DATABASE备份单个表的命令 当然除非有问题的表被分配给它自己的表FILEGROUP 正如您所建议的 您可以做的是将表数据导出到 CS
  • 为什么此标头位置重定向在内容已回显后才起作用?

  • .NET 事件处理程序 - 通用还是不通用?

    每次我深入研究 C 项目时 最终都会遇到很多只需要传递单个项目的事件 我坚持EventHandler EventArgs练习 但我喜欢做的是 public delegate void EventHandler
  • 在Java中加载类路径中的XML文件

    我需要将类路径中存在的 xml 文件加载到我的 java 应用程序中 任何人都可以对此提出建议吗 Thanks 纳伦德拉 Use ClassLoader getResourceAsStream http download oracle co
  • 如何从 Linq2Sql 查询填充 POCO(子)IList 属性?

    我有两门课 public class Question public IList
  • z3 中使用哪些技术来处理非线性整数实数问题?

    以下是 a 的 z3 统计数据problem http www ccs neu edu home jaideep example smt2在非线性整数实数片段中 我的许多问题与此类似 add rows 11062574 added eqs
  • 您有任何提高 ReSharper 和/或 Visual Studio 性能的技巧吗?

    我正在使用 Visual Studio 2008锐锐 http en wikipedia org wiki ReSharper4 而且速度有点慢 我的机器有 2 GB RAM 双核处理器和 7200 rpm 硬盘 我知道更多的 RAM 和更
  • Apache 如何访问 root 用户创建的 SSL 证书?

    我有一台运行 Apache HTTPD 的 Debian 服务器 我已将其配置为使用驻留在 etc ssl private 中的某些 SSL 证书 只有 root 用户具有该目录的读写权限 HTTPD 进程以 www data 用户身份运行
  • Oracle XE 11g 找不到XE数据库

    我是一名刚开始使用Oracle数据库的新手 在安装最新版本的过程中遇到了问题Oracle XE 11gx64 到 Microsoft Windows 7 x64 Enterprise During installation were not
  • JDK 1.6 中的 @override 注解

    我使用的是JDK1 6 当我实现一个接口并在实现类中时 如果我给出 override在我的函数名称之前 Eclipse 抛出编译错误 即根据 Eclipse 下面的代码是错误的 public class SomeListener imple
  • 如何使用 Espresso 存根 Intent.createChooser Intent

    Problem 我的应用程序中有一张图像 并将其共享给任何其他可以处理图像共享的应用程序 并且该功能运行良好 我正在编写一个 Espresso UI 测试来拦截意图并确保它具有正确的操作和附加功能 但似乎无法让它工作 Code 这是创建意图