Android:在使用junit 4.13时出现未解决的引用问题

9
在 gradle 依赖中更新 junit 版本至 4.13 后,在我的代码中使用 junit 包下的类和注解,如 Assert、@Test 等时会显示为红色。 Lint 检查提示:
Unresolved reference: <any junit class>

然而,在构建并运行我的测试时,它可以正常构建和运行。

我尝试过:

  • 重新启动Android Studio
  • 无效的高速缓存并重启
  • 清理并重新构建项目
  • 添加testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"

可以降级junit到4.12版本。如何在不降级版本的情况下消除这个lint错误?

更新:

  • 当我检查ALT + ENTER选项并选择Inspection 'Unresolved reference, in wrong test scope' options > Suppress 'IncorrectScope' for file <name of file>时,会消除该特定文件的这些lint错误。尽管如此,我仍然希望不使用Suppress来解决这个问题。
  • 根据这个问题,看起来这个bug还没有被修复。现在我降级到4.12。
  • 从依赖项中删除espresso和runner也可以解决问题。

你指的是哪个错误? - iraj jelodari
可能与此问题相关:https://issuetracker.google.com/issues/140375151 - BMacedo
顺便说一句,这与链接的问题无关。 - Bohsen
3个回答

10

只需将以下内容添加到您的 build.gradle(App)文件中:

configurations.all {
    resolutionStrategy.force "junit:junit:$junit_version"
}

dependencies {
...
}

0
首先检查你的外部依赖项。 在我的情况下,我发现了双重的jUnit版本。
Junit 4.12
Junit 4.13

而旧版本则附带了androidx.test。 解决方案是

1. exclude dependencies 

或者

2. remove `androidx.test`

或者

3. add conflict startegy

我尝试移除 Robolectric,因为我相信它使用的是 JUnit 4.12。然后清理并重新构建项目,并使缓存失效/重启。但这并没有解决问题。不过,从依赖项中移除 Espresso 和 Runner 确实解决了问题。 - Loremar Marabillas
我在怀疑的依赖项上使用了 exclude group: 'junit' module: 'junit',但没有起作用。我也找不到有关如何删除 androidx.test 的任何参考资料。也许您可以更详细地阐述一下或展示您的代码。 - Loremar Marabillas
你有没有尝试过 {exclude group: 'androidx.test'}? - Vahe Gharibyan

0
借鉴@VaheGharibyan有关重复junit版本的想法,我发现以下代码也可以解决这个问题。
configurations.all {
        resolutionStrategy.dependencySubstitution {
            substitute module('junit:junit:4.12') with module('junit:junit:4.13')
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接