`testImplementation` 似乎没有正确解析测试的依赖关系

tom*_*cco 5 junit android unit-testing gradle android-studio

我正在 Android Studio 中进行一些单元测试(未检测)。我的所有测试依赖项都已在“build.gradle”中声明,如下所示:

testImplementation 'junit:junit:4.12'
testImplementation "org.mockito:mockito-core:$mockitoVersion"
testImplementation "org.powermock:powermock-module-junit4:$powerMockVersion"
testImplementation "org.powermock:powermock-api-mockito2:$powerMockVersion"
testImplementation 'org.json:json:20140107'
testImplementation 'org.robolectric:robolectric:3.4.2'
Run Code Online (Sandbox Code Playgroud)

但是,当我加载测试文件时,所有依赖项都被标记为“无法解析符号 XXX”。如果我将其从 更改testImplementationandroidTestImplementation,则所有依赖项都会被正确检测到。然而,这些不是仪器测试,而是独立的单元测试,所以当我用它执行测试时,androidTestImplementation它会返回一个error: package org.junit does not exist,阻止我运行单元测试。到目前为止我已经检查过的事情(来自许多 stackoverflow 答案):

  • 确保我的测试位于该test文件夹中,而不是androidTest
  • 删除.idea.gradle文件夹
  • 删除依赖项,同步 gradle,重新声明依赖项,重新同步。
  • 使缓存无效并重新启动(多次)。
  • 尝试使用 Android Studio 4.0(当前为 3.6)
  • 从头开始重新导入项目。

另外,需要注意(或者可能不是)该项目是一个库而不是一个应用程序,这一点很重要。

作为一种解决方法,我已经声明了依赖项,这样implementation我就可以继续在本地运行测试,但这当然很麻烦而且很危险,因为我不想最终错误地运送带有测试依赖项的 AAR。

小智 1

答案很晚,但也许它会帮助那些遇到这个问题并为同样的问题而苦苦挣扎的人。

对我有用的是将 build.gradle 中的 sourceSets (在 android 括号中)设置到正确的目录,一开始我有一个不同的配置,但下面的配置对我有用,让我将 JUnit 导入到我的测试类中

sourceSets {
    test.java.srcDirs += 'src/test/java'
}
Run Code Online (Sandbox Code Playgroud)