测试和androidTest之间共享srcDirs,升级到Android Studio Chipmunk(IntelliJ 2021.2.1)后未解决的引用

fiei3ece  于 2023-03-16  发布在  Android
关注(0)|答案(2)|浏览(114)

我刚刚从Bumblebee升级到Chipmunk,在我的仪器化androidTests中遇到了多个依赖性解决问题。
下面是我的源代码集:

sourceSets {
    test.java.srcDirs += 'src/testShared/kotlin'
    test.resources.srcDirs += 'src/testShared/resources'
    androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
    androidTest.java.srcDirs += 'src/testShared/kotlin'
    androidTest.resources.srcDirs += 'src/testShared/resources'
}

其思想是在单元测试和检测测试之间共享测试数据。请记住,测试可以生成和执行,但依赖项在IDE中显示为红色。此外,它可能不相关,但我引用的字符串资源(位于资源模块中)在IDE中也显示为红色。
此外,当我注解掉指向testShared的单元测试源集时,IDE错误会在AndroidTests中消失
这个问题在之前版本的Android Studio中并不存在。我认为这个问题与基础IntelliJ IDE平台有关。有人知道如何修复这个问题,或者有任何变通方法吗?

编辑:下面是一个基本的示例项目,演示了在Chipmunk及更高版本中运行时的问题。在bumblebee中,androidTest中没有未解决的引用错误。此外,您可能需要调整AGP版本,因为我使用海豚beta01构建了此项目,但在Chipmunk中也存在相同的问题https://drive.google.com/file/d/1ZCcEwuqM-m4E5qe94vCn52yWMON8rd5P/view?usp=sharing

nom7f22z

nom7f22z1#

Android Studio IDE和IntelliJ平台的新版本似乎不再支持此功能。

编辑:这种共享代码的方式不再有效。但是,还有另一种方法可以使其有效:

基本上,创建一个android库(sharedTestCode),通过testImplementation和androidTestImplementation在应用中依赖它。在sharedTestCode build.gradle文件中,依赖应用。现在,您应该能够创建共享测试数据并在两种类型的测试中引用它们。

以下是使用此设置的示例项目:

https://drive.google.com/file/d/1I2CZhTxHGRgCN9UCEjIuWUfFnGxTF_Cv/view?usp=sharing

第二次编辑:确保依赖于:app项目的任何模块还定义了productFlavors和flavorDimensions,并与应用的build.gradle文件的build.gradle配置相匹配。

例如,我必须将以下代码添加到我的sharedTestModule的build.gradle文件中:

flavorDimensions "environment"

productFlavors {
    local {
        dimension "environment"
    }
    gae {
        dimension "environment"
    }
}

以前的答复:

我创建了一个支持线程:https://issuetracker.google.com/issues/232420188
下面是Google对这种引用测试数据的老方法的回答:
IDE不再支持以这种方式共享代码。之前这种方式可以正常工作的原因是,在chipmunk之前的版本中,我们运行Android studio import时设置了intellij选项,以便为每个Gradle项目创建一个模块。该选项已从IDEA中删除多年。这种导入方式会带来很多问题,因为intellij模块只能设置两个范围用于依赖项和其他信息,这些是编译和测试。默认情况下,Android模块实际上有三个不同的作用域(大致对应于每个变体的Gradle源集)主要,unitTest和androidTest。使用此选项将它们Map到intellij模块需要我们合并unitTest和androidTest的依赖项。此外,任何自定义源集也需要合并。这导致了编辑器中许多不正确的符号分辨率沿着许多其他问题。
在chipmunk中,我们改为(大致)为每个Gradle源集创建一个模块,这使我们能够正确Map信息,但不幸的是,这会导致源集之间共享信息,IDE将不支持这种情况。
总而言之,为了确保正确性,每个源文件必须仅存在于一个模块中,否则IDE无法知道要使用哪个上下文。这有时也会导致构建出现微妙问题。要在测试模块之间共享源代码,您应该能够将代码放在单独的项目中,并将其作为testImplementation和androidTestImplementation的依赖项使用。

pod7payv

pod7payv2#

要解决这个问题,请将共享的测试依赖项移到一个单独的模块中。

  • 在项目窗口中单击鼠标右键,然后转到New -〉Module
  • 选择“Android库”模板
  • 模块名称shared-test
  • 软件包名称应与主应用中的名称相同
  • 点击“完成”

将共享代码移入:shared-test模块。
现在,在您的应用的build.gradle文件中,为单元和 Jmeter 化测试构建配置添加对:shared-test模块的依赖关系:

testImplementation(project(":shared-test"))
androidTestImplementation(project(":shared-test"))

如果您的共享测试代码依赖于应用中的代码(例如,您具有引用应用接口的Hilt模块),请在共享测试模块的build.gradle文件中添加对应用模块的依赖关系:

implementation(project(":app"))

GitHub上的示例如下:https://github.com/android/architecture-samples

相关问题