如何通过 Android Studio 为动态功能模块执行 UI 测试?
How to execute UI tests for a Dynamic Feature Module via Android Studio?
我有一个常规 :app
模块和一个 DFM :feature
。
我将 DFM 的测试放在 androidTest
源集中 :feature
。
当我尝试使用 Android Studio 创建的 运行 配置启动测试时,它静静地失败并显示 Test framework quit unexpectedly
。
如果我使用 Android Studio 在 Run
选项卡中显示的命令通过终端启动测试,我将看到:
$ adb shell am instrument -w -m -e debug false -e class 'com.amazing.feature.AmazingTest' com.amazing.application.test/com.amazing.feature.TestRunner
...
Unable to find instrumentation info for: ComponentInfo{com.amazing.application.test/com.amazing.feature.TestRunner}
这并不奇怪,因为 运行ner 的路径是不同的:
$ adb shell pm list instrumentation
instrumentation:com.amazing.feature.test/com.amazing.feature.TestRunner (target=com.amazing.application)
如果我在命令行上使用该工具,则测试有效。
有没有办法教 Android Studio 做到这一点?
我也遇到了这个问题,刚升级到 AGP 7 和最新的 Android Studio。在我的例子中有点不同,我检查了同一个存储库两次,所以同时在 2 个分支上工作。在我的例子中,碰巧一个分支 + android studio 实例可以工作,它 select 正确的 TestRunner,而另一个实例不工作。这让我找到了简单的解决方案:
- 构建 -> 清理项目
- 删除所有剩余的构建文件夹(对我来说只有 1 个)
然后重试,select 测试运行程序正确。
我尝试过的其他事情,我不知道他们是否有帮助,如下所示:
- 确保我使用 Java 11(因为我使用的是 AGP 7)
Project Structure
-> Gradle settings
-> Gradle JDK
应该类似于 11
- 禁用实验性功能
Do not build Gradle task list during Gradle sync
(在 Android Studio Arctic Fox 上自动启用)
我遇到了同样的问题。原来 gradle 在 androidTest APK 的动态功能模块 AndroidManifest.xml
的 标签中创建了一个错误的 targetPackage
。您可以通过在模块的 build.gradle defaultConfig 中设置 testApplicationId
来解决此问题。
defaultConfig {
testApplicationId 'com.amazing.feature.test' // Set the test package here!
testInstrumentationRunner 'com.amazing.feature.TestRunner'
[...]
}
我有一个常规 :app
模块和一个 DFM :feature
。
我将 DFM 的测试放在 androidTest
源集中 :feature
。
当我尝试使用 Android Studio 创建的 运行 配置启动测试时,它静静地失败并显示 Test framework quit unexpectedly
。
如果我使用 Android Studio 在 Run
选项卡中显示的命令通过终端启动测试,我将看到:
$ adb shell am instrument -w -m -e debug false -e class 'com.amazing.feature.AmazingTest' com.amazing.application.test/com.amazing.feature.TestRunner
...
Unable to find instrumentation info for: ComponentInfo{com.amazing.application.test/com.amazing.feature.TestRunner}
这并不奇怪,因为 运行ner 的路径是不同的:
$ adb shell pm list instrumentation
instrumentation:com.amazing.feature.test/com.amazing.feature.TestRunner (target=com.amazing.application)
如果我在命令行上使用该工具,则测试有效。
有没有办法教 Android Studio 做到这一点?
我也遇到了这个问题,刚升级到 AGP 7 和最新的 Android Studio。在我的例子中有点不同,我检查了同一个存储库两次,所以同时在 2 个分支上工作。在我的例子中,碰巧一个分支 + android studio 实例可以工作,它 select 正确的 TestRunner,而另一个实例不工作。这让我找到了简单的解决方案:
- 构建 -> 清理项目
- 删除所有剩余的构建文件夹(对我来说只有 1 个)
然后重试,select 测试运行程序正确。 我尝试过的其他事情,我不知道他们是否有帮助,如下所示:
- 确保我使用 Java 11(因为我使用的是 AGP 7)
Project Structure
->Gradle settings
->Gradle JDK
应该类似于 11
- 禁用实验性功能
Do not build Gradle task list during Gradle sync
(在 Android Studio Arctic Fox 上自动启用)
我遇到了同样的问题。原来 gradle 在 androidTest APK 的动态功能模块 AndroidManifest.xml
的 targetPackage
。您可以通过在模块的 build.gradle defaultConfig 中设置 testApplicationId
来解决此问题。
defaultConfig {
testApplicationId 'com.amazing.feature.test' // Set the test package here!
testInstrumentationRunner 'com.amazing.feature.TestRunner'
[...]
}