问题标签 [androidx-test]

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 回答
247 浏览

android - 我应该如何正确关闭我的 AndroidX Espresso 测试?

我正在编写 Espresso 测试来测试我的应用程序链接是否由我的应用程序正确处理。我已经设置了 Android Studio 并创建了一个通过的测试,但问题是测试套件挂起。我创建了一个类,LinkDispatcherActivity负责解析传入的链接并将它们的数据分派给适当的活动。测试设置为使用ActivityTestRule启动LinkDispatcherActivity并使用要测试的 URL 给它一个意图。测试正在运行并通过,所以我假设我已经正确设置了所有内容(这本身就是一个挑战)。

我尝试过使用新的ActivityScenarioRule,但不知道如何将意图传递给它。

这是我的测试课:

这是我在 by 中添加的依赖项build.gradle

最后,这是 Android Studio 在其运行面板中显示的内容: 安卓工作室

干杯!

编辑:忘记添加我在 Logcat 中收到此错误:

更新:测试在物理设备上运行时正确完成。仍然不确定是什么导致模拟器挂起。

0 投票
0 回答
48 浏览

android - 如何在 Android Studio 中只启动 SmallTest

我已经开始了一个带有测试自动化的新项目。有些测试需要一些时间 这些已被标记为@LargeTest。还有一些 SmallTests(单元测试)。开发人员需要更频繁地运行小型测试。

我在网上搜索了一段时间,看到了如何通过 adb shell 和 gradle 按大小运行测试。但是AndroidStudio中没有直接的解决方案

我有一些这样的类和一些简单的核心逻辑测试:

有时只需要执行小型和/或中型测试。如何在 Android Studio 中执行此操作?

0 投票
0 回答
41 浏览

android - 扩展 AndroidJUnitRunner 后 GrandPermissionRule 不起作用

扩展AndroidJUnitRunner GrandPermissionRule停止工作后,测试被权限对话框阻止。

这是我的跑步者课程:

Gradle 运行器配置:

在一切按预期工作之前。有人有这个问题吗?如何解决?

0 投票
0 回答
440 浏览

android - 在 RecyclerView 的 Espresso 测试中调用 ViewHolder 的点击不会调用视图持有者的 Onclick 监听器

我的片段如下

我的 RecyclerView 适配器

查看持有人

布局文件:fragment_nerd_launcher.xml

ViewAdapter 布局:simple_list_item_1.xml

espresso 测试不调用 onclick 方法。

当我在 Android Studio 中运行应用程序时,会调用 onclick 侦听器,但不会在我编写 espresso 测试时调用。我的浓缩咖啡测试如下

它在这条线上失败

Intents.intended(expectedIntent);

堆栈跟踪

我不知道我做错了什么。

0 投票
1 回答
101 浏览

android - 来自 ApplicationProvider.getApplicationContext 的错误应用程序实例

Application通过创建一个子类并将这个子类的完全限定名称指定为标签中的android:name属性来提供我自己的实现:AndroidManifest.xml<application>

运行这个 Android 应用程序,我可以得到正确的Application对象,Activity例如:val app = application as GeniuzApp

然而,当我调用ApplicationProvider.getApplicationContext配置为 的单元测试时@RunWith(RobolectricTestRunner::class),我没有得到我的Application子类的实例(即GeniuzApp)。

我是否需要在单元测试中提供任何其他内容才能获得正确的应用程序实例?

0 投票
1 回答
1301 浏览

android - Robolectric 无法在后台线程上调用 setValue

我正在测试一个实例AsyncTaskonPostExecute调用。由于我正在调用关于 UI 线程正在执行的调用的任何问题。setValueLiveDatasetValueonPostExecute

然而,在 Robolectric 单元测试中运行它,我得到:java.lang.IllegalStateException: Cannot invoke setValue on a background thread

为了让这个单元测试等待后台和前台任务完成,我通过以下方式利用等待工具:

这是IllegalStateException: Cannot invoke setValue on a background threadflushForegroundThreadScheduler()打电话!!!!

为什么我得到这个异常?我怎样才能onPostExecute像在 UI 线程中那样执行?

更新

记录线程似乎两者flushBackgroundThreadScheduler()都是flushForegroundThreadScheduler()内联同步执行的。我可以观察到:

由于传递给的 lambdaawait.until在另一个线程上运行,因此两者flushBackgroundThreadScheduler()flushForegroundThreadScheduler()都在该线程 1519527121 上执行。

因此,我可以通过在与 UI 线程对应的测试线程中运行以下解决方法来解决我的问题。然而,我需要这样Thread.sleep()才能成功,我不喜欢它。

0 投票
1 回答
508 浏览

android - 如何使用launchActivity将测试从单个测试套件中的捆绑包中恢复活动的测试与其他测试保持一致

我有一个用于 android 应用程序的测试套件,测试多个场景。对于他们中的大多数人来说,使用 AndroidX 测试框架的 launchActivity 是有意义的。

在同一个套件中,我也有测试从包中恢复活动的测试。这些测试需要在开发人员选项中启用“不保留活动”,因为只有这样才能直接进行设置,以便使用非空的已保存实例状态调用 onCreate。

但是,当Don't keep activities在开发人员选项中启用时,launchActivity 会失败并IllegalStateException显示以下堆栈跟踪:

我想知道为什么存在这种限制以及如何处理?因为当活动从实例状态恢复时,它会阻止测试场景。

即使 UiAutomator 用于这些特定测试用例测试从实例状态恢复活动,测试也不能真正在同一设备/模拟器上一起运行,因为此设置是系统设置。

或者,可以在测试之前和之后打开和关闭设置,但这只能在根设备上工作,或者需要使用 UiAutomator 来翻转系统设置开关,这非常慢。

0 投票
0 回答
582 浏览

android - Android Studio 3.5.2 androidx 测试成为未解决的参考

今天早上,我的 android studio 自动更新了。

使用 espresso 进行的 UI 测试被破坏了。

android jetpack 测试模块现在成为未解决的参考。

你有什么解决办法吗?

0 投票
1 回答
177 浏览

android - Jetpack AndroidX 测试“一次编写,到处运行” - 但是到处运行的最佳方式是什么?

最近我展示了一段关于 androidX 测试的 google IO 视频,其中引用了“Write Once, Run EveryWhere”。了解 androidX 测试库让我很兴奋。

我发现,经过很长时间,谷歌为开/关设备的单元测试和仪器测试提供了一个不错的单一库。但是我发现在开/关设备上运行相同的测试有些困难。

基本上在 Android 中,我们创建两个源根目录test/javaandroidTest/java分别在其中存储单元测试和仪器测试。单元测试在 JVM 上运行,仪器在设备/模拟上运行。

然后我为目录中的一个片段编写了测试test/java

因此,当我使用小的绿色运行图标执行此测试时,它会在没有模拟器的情况下在 JVM 中运行此测试,这很棒。但要在设备上运行相同的测试,我必须移动此代码androidTest/java源根目录。

基本上我得到了相同的测试可以在任何地方运行,当我们使用 androidX 测试库时,您不必依赖不同的工具和库来完成相同的工作。

我试过了。

之后,在谷歌上搜索我发现我们必须sharedTest/java使用下面的 gradle 行创建源根目录,以便它可以在设备上或设备外运行。

将我的代码放入后sharedTest/java,如果我使用绿色运行图标执行测试,它总是要求设备。这也令人困惑,因为我永远无法在 JVM 上运行它。

我的问题来了。

如何在不将代码移动到不同源根目录的情况下无缝地打开/关闭设备执行相同的测试?

0 投票
1 回答
476 浏览

android - How do I import ActivityScenario?

I am attempting to follow the Android ActivityScenario documentation to write Robolectric-based tests. Adding androidTestImplementation "androidx.test.core:app:1.2.0" to my build.gradle allows me to add import androidx.test.core.app.ActivityScenario; to my test class and use the ActivityScenario class. Despite this, gradle is reporting Failed to resolve: androidx.test.core:app:1.2.0 which means I can't run the tests.

I have tried cleaning the build, re-running the gradle sync, invalidating caches and restarting. I have also tried importing other packages from https://mvnrepository.com/artifact/androidx.test, none of which result in ActivityScenario being found. In particular, I would expect androidTestImplementation "androidx.test:core:1.2.0" to work but it does not.

Versions:

  • Android Studio 3.5
  • Robolectric 4.3.1