问题标签 [android-instrumentation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3915 浏览

android - Lollipop 及更高版本的仪器测试“未找到测试”

我的基于仪器的(espresso)测试不能在 Lollipop+ 设备和模拟器上运行。它们可以在任何其他平台上正确运行。我和这个帖子里的人有同样的症状 - https://groups.google.com/forum/?fromgroups#!topic/adt-dev/QW5SuzQizNk

  • 我的测试在 src/androidTest/java/
  • 我已经设置了 testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner'
  • 测试类是@RunWith(AndroidJUnit4.class)
  • 单个测试用 @Test 注释

我可以执行 ./gradlew connectedCheck 并且测试在带有 KitKat 的设备上运行良好,但是当我尝试在带有 Lollipop 的设备上以相同的方式运行相同的测试时,我得到......

15:02:15.784 [WARN] [org.gradle.api.Task] XT1095 - 5.1 上的测试失败:仪器运行因“java.lang.NoClassDefFoundError”而失败

15:02:16.011 [警告] [org.gradle.api.Task] com.android.builder.testing.ConnectedDevice > 未找到测试。[XT1095 - 5.1] 失败

15:02:16.011 [警告] [org.gradle.api.Task] 未找到测试。这通常意味着您的测试类不是您的测试运行程序所期望的形式(例如,不要从 TestCase 继承或缺少 @Test 注释)。

0 投票
1 回答
906 浏览

testing - Espresso 匹配选定的微调器文本

按照此处的答案,我尝试检查是否选择了某个微调器文本。微调器出现在对话框中,所以我尝试了:

但是,这不起作用,我收到以下错误消息:

android.support.test.espresso.base.DefaultFailureHandler$AssertionFailedWithCauseError: 'with text: a string contains "sachet"' 与所选视图不匹配。预期:带有文本:包含“sachet”的字符串得到:“AppCompatSpinner{id=2131624039, res-name=package_spinner, visibility=VISIBLE, width=620, height=75, has-focus=false, has-focusable=true, has-window-focus=true, is-clickable=true, is-enabled=true, is-focused=false, is-focusable=true, is-layout-requested=false, is-selected=false, root-is- layout-requested=false, has-input-connection=false, x=0.0, y=75.0, child-count=1}”

“is-selected=false”是否意味着它找到的微调器未被选中?这是在具有 API 18 的真实设备(不是模拟器)上运行的。在 Espresso 运行期间以及手动测试时,微调器被正确设置为“sachet”。为什么 Espresso 有问题?

不确定这是否相关,但微调器适用于以下类型的对象:

微调器适配器看起来像:

0 投票
2 回答
577 浏览

java - 从 InstrumentationTestCase 创建通知

我想从单元测试中测试通知是否能够从资产中播放自定义声音。该测试并不意味着验证任何内容,我将其编写为一种快速演示功能的方法,而不会弄乱主应用程序代码。

所以在测试项目中,我在里面添加了一个wav文件/res/raw。我将在通知生成器中使用此 URL:

该 URL 应该根据我在 SO 中阅读的问题起作用。让我们假设它有效。

现在因为我不想在主项目的/res/raw文件夹中包含测试 wav 文件,但在测试项目之一中,我不得不让我的单元测试扩展,InstrumentationTestCase以便我可以访问测试项目中的资源。

这是代码:

notify调用引发以下异常:

我已经将此异常跟踪到NotificationManagerService班级:

显然,该异常与自定义声音没有任何关系,而是与我们正在从InstrumentationTestCase.

有没有办法测试这个?我记得AndroidTestCase过去曾创建过通知,但如果我这样做了,我将无法访问测试 wav 文件。我可以用 wav 创建一个 jar 并将 jar 放到测试项目的 lib 文件夹中,但这会隐藏文件,如果将来需要替换它,其他程序员可能很难找到它。

0 投票
1 回答
8764 浏览

android - android 仪器测试的输出在哪里?

我设法让 gradle cC 工作。我的测试只是打印出来并记录一行文本。

system.outlogging输出在哪里?

谢谢

编辑:我找到了单元测试的输出(它在.../app/build/test-results/)。但仍然没有其他运气。

有没有办法以某种方式保存仪器测试的输出?

0 投票
0 回答
49 浏览

android - 运行 Android Instrumentation 测试时发生意外的触摸事件

我正在使用 JUnit4 测试运行程序测试我的应用程序,似乎导航抽屉切换被无缘无故地按下,因为我可以看到波纹出现。

我编写了一个测试,将视图绘制为位图并将其保存到存储中。这是图像的外观:http: //imgur.com/EURrE2R

如果将其显示在深色背景上,您会在图标周围看到一个波纹圆圈。

这是我在活动中运行相同代码时得到的结果:http: //imgur.com/KPz50nF

是什么原因造成的,我该如何摆脱它?

测试代码:

活动代码:

活动布局:

0 投票
0 回答
1170 浏览

android - 在 Android 6.0+ 设备的日志中看不到 Spoon 屏幕截图

编写集成测试的人肯定听说过 Spoon 和 Spoon-Gradle-Plugin,它们为您的测试提供有用的功能。我正在使用stanfy/spoon-gradle-plugin

com.squareup.spoon.Spoon.java在测试中使用类提供的屏幕截图方法。在我通过"./gradlew spoon"命令运行测试后,它会为我生成包含每个测试的日志和屏幕截图的 xml 文件。这适用于系统版本低于 6.0 的每个 android 设备。当我使用 Marshmallow 在设备上运行测试时,我的控制台在测试结束时看起来像这样:

因此,当我看到这一点时,我首先想到的是......自 android 6.0 以来更改的权限处理问题。所以我想如果我提供

WRITE_EXTERNAL_STORAGE

READ_EXTERNAL_STORAGE

我的应用程序的权限应该可以工作。所以我创建了这个简单的 shell 脚本来检测 SDK 版本,如果它等于或高于 23,那么在测试开始之前授予我的包的权限。

似乎我的权限已获得但在测试开始后我仍然无法从设备中提取屏幕截图。

我的第二个想法是。好的,如果这不是权限问题,那么也许没有要提取的屏幕截图。因此,Spoon 会在测试完成后从您的设备中清除屏幕截图。我开始测试,等到其中一些完成,然后在我的控制台 ctrl+C 中终止进程。我打开了 Android 设备监视器,我可以看到我的测试截图在那里等待拉取。仍然没有发生。

所以我的第三个想法是。好吧,如果那没有权限并且屏幕截图功能在 6.0 设备上可以正常工作,那么可能是勺子问题。我试图在网上寻找类似的主题,但没有一个与我的案例直接相关。

我发现了这个问题,但它并没有解决我的问题。我不是UIAutomator用来截屏的,而是 Spoon 的截屏方法。

我想我现在正在解决一个问题,但我做了建议的事情,但没有帮助。

4天前有一些修复,但我现在仍然面临问题,我的库是最近的

所以......也许我错过了一些东西。也许我忘记了需要另一个许可。我很感激任何建议。

0 投票
1 回答
4771 浏览

android - 有没有办法为目标 API 编写单元测试

我正在编写 Android 仪器测试的过程中,Robolectric 自定义阴影不足。

理想情况下,我们希望编写跨所有版本的 Android SDK 灵活的代码,但是我处于边缘情况,我需要为仅适用于 Marshmallow 的方法编写单独的单元测试。

由于操作系统依赖项的差异(即 java.lang.NoClassDefFoundError 的),我还需要编写一个仅适用于 Lollipop 及以下的单元测试

无论如何,我是否可以通过类似 Junit4 的注释或类似于 Robolectric 所做的事情来做到这一点,如果 SDK 不合适,它可以忽略运行测试?

我不想写这样的代码:

0 投票
1 回答
69 浏览

android - 在 Android UnitTest 类中放置多个“testXXX()”函数

0 投票
1 回答
2136 浏览

java - 通过spoon-gradle插件从特定包运行仪器测试

我正在使用Roman Mazur的spoon-gradle-plugin。我能够一次运行所有测试,但我无法指定要启动的“组”测试。目前我的勺子设置如下所示:

我的测试位于包中:

在此处输入图像描述

我的目标是创建单独的 gradle 任务,这些任务依赖于勺子分别从每个包启动测试。Roman 给了我们参数instrumentationArgs,它应该能够在勺子中编辑一些属性。

正如我在spoon的主git上看到的那样,您可以指定包,spoon-runner应该在其中查找您的测试,示例如下:

所以我的想法是把这个属性放到instrumentationArgs中。因此,我创建了这样的勺子任务:

我能说的是 noAnimations 参数很好地扩展了默认的勺子配置,防止创建 gif。所以 instrumentationArgs 肯定会采用我的字符串数组,但不会应用更改,因为在我的终端中:

不管我用“包”属性做什么,我总是收到结果:

我想改变它,但不知道如何。此外,我可以说我试图在我的项目中查找“com.myapp.instrumentation.flowtests”字符串,并且使用它的唯一位置是:上面介绍的包中的测试 + gradle 任务。所以它在任何地方都没有硬编码。如果我通过以下方式开始测试,则会选择相同的位置:

在我使用之后:

它还运行整个测试集。

0 投票
1 回答
441 浏览

android - 膨胀活动内容在检测中失败

我正在尝试在项目中设置浓缩咖啡。
我在 Android Studio (1.5.1) 中新建了一个空活动项目,
运行没有问题

将 espresso 配置添加到项目和测试类中。
运行测试时我得到

顺便说一句,ID 用于工具栏

测试类是

gradle.build 是

我究竟做错了什么?