问题标签 [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 回答
329 浏览

android - 我很困惑何时使用仪器测试以及何时使用单元测试

现在有了 AndroidX 测试框架,我们可以使用 Robolectric 后端将 Espresso 测试作为单元测试运行。但是我很困惑何时使用仪器测试以及何时使用单元测试。

假设我们有两个屏幕,MovieListActivityMovieDetailActivity。当我单击MovieListActivity中的某个项目时,该电影的详细信息将显示在MovieDetailActivity中。

现在在这种情况下,可能的单元测试可能是什么,可能的仪器测试可能是什么?

例如,我可以编写仪器测试

  • 检查电影是否列出
  • 点击电影进入详细画面
  • 详细信息屏幕正确显示详细信息。

但是现在,这些测试也可以作为单元测试运行(因为我们使用的是 Android X 测试框架)而且速度更快,因为我们不在设备/模拟器中运行测试。那么是什么使测试符合仪器测试的条件?

如果我想同时运行单元测试和仪器测试怎么办?

由于我们使用的是 Android X 测试框架,因此可以通过将文件复制到文件夹来将相同的单元测试文件作为仪器测试运行androidTest。这会造成重复文件,并使测试用例维护变得困难。(例如,如果我在单元test文件夹中进行编辑,则应在androidTest文件中进行相同的修改。)

  • 有什么方法可以将测试标记为同时作为仪器测试和单元测试运行?
  • 如果这是一种不好的做法,那么在使用 Android X 测试框架时应该考虑哪些最佳做法以及其他哪些最佳做法?
0 投票
0 回答
468 浏览

android - 使用 Robolectric 和 androidx.testing 测试 BottomSheetDialog 项目 click()

我正在尝试使用 androidx.test 和 Robolectric 测试 BottomSheetDialog,并在尝试单击对话框中的按钮时遇到问题。

我使用按钮单击打开对话框,然后我可以验证 BottomSheetDialog 中的按钮是否存在,但是单击失败并显示Caused by: java.lang.RuntimeException: Action will not be performed because the target view does not match one or more of the following constraints: at least 90 percent of the view's area is displayed to the user.. 检查项目显示高度/宽度为 0。

我尝试设置固定大小并在单击显示工作表和单击工作表中的按钮之间休眠。我还尝试了一些不同的布局选项。

bottomsheet_view.xml

完整的堆栈跟踪:

0 投票
0 回答
605 浏览

android - AndroidX 测试 - ActivityScenario onView() 找不到嵌套的子片段

我有一个活动MyActivity,它又包含一个片段MyFragment。在MyFragment我显示一个 BottomSheetDialogFragment 使用childFragmentManager如下:

bottomSheetFragment.show(childFragmentManager, "BottomSheetFragment")

下面是我在 JVM 中运行的测试用例(使用 AndroidX 测试/Robolectric)。

上述测试用例因“androidx.test.espresso.NoMatchingViewException: No views in hierarchy found matching”而失败。但在 中scenario.onActivity {},我可以看到膨胀的 BottomSheet 片段。在调试时,我发现 BottomSheet 完全膨胀,因为它处于 Resumed 状态。

我的问题是:

  1. Espresso.onView()持有什么?当我检查视图层次结构时,我看到了 MyActivity 和 MyFragment,但没有看到 BottomSheet。

  2. 是否无法使用 获取嵌套的子片段Espresso.onView()

  3. Espresso.onView()如何通过使用而不是查询来断言我的 BottomSheet 中是否存在视图scenario.onActivity

0 投票
1 回答
80 浏览

android - 库项目中的 Dagger2 + ActivityInjection + AndroidXTest/Espresso/RoboElectric

我正在研究 android 库模块,我想在我的模块中测试独​​立活动。我正在关注文章https://medium.com/androiddevelopers/write-once-run-everywhere-tests-on-android-88adb2ba20c5使用 roboelectric 和 androidx 测试与 espresso。我最近在我的图书馆项目中引入了 dagger 2。

这样我的 Activity 看起来像这样:

这工作得很好,我不希望底层应用程序使用 dagger 2。

现在我想在不依赖底层应用程序或应用程序类的情况下测试我的活动。如何在活动中注入模拟 ResourceProvider?

0 投票
0 回答
176 浏览

java - 为什么在整个测试过程中没有保持主要活动?

所以我在登录应用程序时遇到了一些问题。

我一直在尝试为它编写一个集成测试......

在哪里

那失败了

checkUser体内。所以我扔了一个

login_setsUser作为...中的第一个声明

这也失败了,因为

现在事实上它并Success(DESTROYED)没有DESTROYED告诉我我无论如何都使用了错误的状态,但我更关心的是它确实在测试一开始就说DESTROYED对了。

那么为什么活动被破坏了,我如何让它保持活力呢?

日志,不管它们值多少钱:

0 投票
1 回答
3157 浏览

android - Android 问题:: 发现多个文件与操作系统无关路径 'androidsupportmultidexversion.txt' “错误”

我在编译我的项目时遇到了这个问题我为此尝试了一些解决方案,那就是

发现多个文件具有独立于操作系统的路径“META-INF/LICENSE”

在 gradle:3.0.0 上找到多个文件,其独立于操作系统的路径为“META-INF/ASL2.0”

https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.PackagingOptions.html

https://www.bswen.com/2019/11/android-More-than-one-file-was-found-with-OS-independent-path-META-INF-DEPENDENCIES.html

错误:发现多个文件具有独立于操作系统的路径“META-INF/DEPENDENCIES”

'在与操作系统无关的路径 project.properties 中发现了多个文件' android 中的错误

Gradle 错误:发现多个文件与操作系统无关路径 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version'

https://dorbae.github.io/android/troubleshooting/Android-Troubleshooting-Morethanonemetainf/

https://github.com/Nexmo/nexmo-java/issues/128

但是对我没有任何帮助,有人知道如何解决这个问题吗?

0 投票
1 回答
411 浏览

android - java.lang.NoClassDefFoundError:测试模块无法解析其他功能模块的类,单元测试 - Kotlin - Android

我有以下项目结构:

其中 Testkit 具有所有依赖项,包括 app 和 featureModules。Testkit 包括与应用程序和功能模块中的功能相关的所有单元测试。

当我从 Android Studio 运行单元测试时(右键单击-> 在 Testkit 中运行测试),它们运行良好。但是,每当我尝试从 gradle command: 运行它时./gradlew TestKit:testInternalDebugUnitTest,它都会抛出NoClassDefFoundError其他模块的所有依赖项(对于应用程序和功能模块)。

此外,我已经在测试模块中添加了所有模块的实现和 testImplementation 依赖项。

请建议:

  1. 我是否需要添加在其他模块中生成的类的路径,如果是,请指导在哪里。

  2. 运行覆盖率测试也失败了

    java.lang.VerifyError:错误的返回类型

请建议我在这里做错了什么。

注意: 我创建了一个测试套件,因为 Roboelectric 在功能模块中存在多个未解决的问题,例如:https ://github.com/robolectric/robolectric/issues/5428

版本 AS:4.0.1 gradle:4.0.1 gradle-wrapper:6.5 Robolectric:4.3.1

0 投票
1 回答
392 浏览

android - DialogFragment的FragmentScenario,onCreateDialog未调用

我想使用androidx.fragment:fragment-testinglib 测试 DialogFragment。我调用launchFragmentInContainerand moveToState(Lifecycle.State.RESUMED),但onCreateDialog在这个片段中没有调用。

我调试了应用程序,并确保onCreateDialog调用早于onResume,但在此测试场景onCreateDialog中未调用,因此fragment.dialog为 null。

我应该调用什么FragmentScenario来创建我的对话框?

0 投票
0 回答
94 浏览

android - 无法解析 androidx 上的符号“ActivityTestRule”

我正在尝试测试我的 Activity,但无法导入 ActivityTestRule。

我的毕业档案

编辑 我也尝试过 ActivityScenarioRule。同样的问题,无法解决符号 ActivityScenarioRule

0 投票
0 回答
374 浏览

android - Android单元测试问题:没有注册仪器!必须在注册仪器下运行

我遵循了 Android Developer文档并尝试在 Android 项目中进行简单的单元测试。

但我尝试运行单元测试,ApplicationProvider.getApplicationContext<Context>() 但出现异常:

java.lang.IllegalStateException:未注册检测!必须在注册仪器下运行。

看起来我没有注册仪器。但是医生没有提到任何关于此的事情。

如果我确实实现了 Robolectric 库并使用它,它工作正常@RunWith(Robolectrictestrunner::class.java)(而且我需要在第一次运行时忍受长时间的设置。)。但这很奇怪,因为文档说在 androidx.test:core 中包含 Robolectric 环境

我想知道是否缺少一些设置或其他正确的方法来使用 SparseArray 之类的东西进行单元测试,或者其他东西属于 Android SDK。

这是我的build.gradle:</p>