单元测试不适用于 Android Studio 北极狐

gma*_*ull 37 junit android unit-testing gradle android-studio

我最近安装了 Android Studio Arctic Fox v2020.3.1 Beta 2 以便能够Compose在我们的项目中使用 Jetpack ,因为我无法在 AS 4.2.1 上这样做,因为Compose抛出了一个奇怪的构建错误,该错误已在 Arctic 上得到修复狐狸

所以这里的问题是,在加载项目后,更新一些 SDK/库我能够构建和运行没有问题,但是,当我去运行单元测试时,我注意到 IDE 不再识别所有测试类。经过一番调查,我发现新版本的 AS 将不再识别 JUnit 配置

正如您在下面的屏幕截图中看到的那样,无法像往常一样运行这些测试:

在此处输入图片说明

在此处输入图片说明

而这一次是Run/Debug Configurations在哪里JUnit试验正在为未知的类别:

在此处输入图片说明

最后,我确实创建了一个 gradle 配置来测试,但它只是在左侧说:

未收到测试事件

并在右侧抛出错误:

任务“功能:注册:testDevDebugUnitTest”的执行失败。未找到给定的测试包括:com.projectsaturn.android.features:signup.SignupViewModelTest

我想知道那里是否有人遇到过这个问题并且能够解决?

任何帮助表示赞赏!

更新 01:

所以我决定回滚一切,从头开始。这次我只更新了几点:

  • 摇篮com.android.tools.build:gradle:7.0.0-beta02
  • 科特林org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32
  • 崩溃分析com.google.firebase:firebase-crashlytics-gradle:2.6.1
  • 测试(核心、跑步者和规则)androidx.test:core/runner/rules:1.3.0

现在的问题是,当我通过 Gradle 运行它时,所有单元测试都失败了。我怀疑它@Before在运行实际测试函数之前没有运行带注释的函数。或者我没有正确设置 Gradle 测试(下面的截图)?

在此处输入图片说明

Tid*_*ail 7

如果您使用的是 Android Studio Arctic Fox,则需要稍微修改您的 app/build.gradle。

添加

android {
    testOptions {
        execution 'ANDROIDX_TEST_ORCHESTRATOR'

        unitTests.all {
            useJUnitPlatform() // <--- this is the important part
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并确保将 junit-engine 添加到您的依赖项中

testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.1'
Run Code Online (Sandbox Code Playgroud)

  • 不起作用,也没有真正的解释:( (4认同)
  • 通过 import org.junit.jupiter.api.Test 而不是 import org.junit.Test 替换您在测试文件中的导入 (2认同)
  • 完成上述答案需要使用 @Test 的 Jupiter 注释。如果您不这样做,您将得到一个空的测试运行程序(它不会找到您的测试),并且会显示“没有可用的任务”。 (2认同)

Dha*_*esh 5

这可能不是适合所有人的解决方案,但我们的项目有许多单元测试由于 Android Studio Arctic Fox 的Gradle 测试运行程序而被破坏。看来,如果您更新到最新的 Gradle 插件,右键单击测试类将提示新的 Gradle“创建测试”选项。创建 Gradle 测试选项

我们还没有更新插件,所以我们的解决方案是为单元测试创​​建我们自己的 Gradle 运行配置。

这可以通过以下方式完成:

  1. 转到工具栏 > 运行 > 编辑配置
  2. 然后在 Gradle 下创建一个新配置,其中包含要运行的测试的任务 运行配置 旧版 Android JUnit 测试是 Android Studio 默认运行的测试,无需更新插件。