在 Android Studio 中的 Android Instrumentation 测试和单元测试之间共享代码

问题描述 投票:0回答:5

Android Studio 中这两种测试模式之间可以共享代码吗? 我有一组 Mock Utils 类,我需要在两种测试模式下访问它们。

android testing android-studio gradle android-testing
5个回答
28
投票

最后我找到了解决方案(解决方法),感谢 Dan Lew 的博客文章(http://blog.danlew.net/2015/11/02/sharing-code- Between-unit-tests-and-instrumentation-tests -on-android/)。

我提出的解决方案是利用源集来定义通用代码。首先,我将我的共享测试代码放入 src/sharedTest/java1 。

android {  
  sourceSets {
    String sharedTestDir = 'src/sharedTest/java'
    test {
      java.srcDir sharedTestDir
    }
    androidTest {
      java.srcDir sharedTestDir
    }
  }
}

上面所做的是将我的共享代码目录添加到测试和 androidTest 源集。现在,除了默认的 Java 源之外,它们还将包含共享代码。

编辑(2022-08-15):这对于 A/S Chipmunk(2021.2.1)及更高版本不起作用,要讨论原因以及(现在)推荐的实现代码共享的方法,请参阅此问题和接受的答案:测试和 androidTest 之间共享 srcDirs,升级到 Android Studio Chipmunk 后未解析的引用(IntelliJ 2021.2.1)


6
投票

从 Android Studio Chipmunk 开始,通过公共文件夹和源集共享代码不再有效。但是,还有另一种方法可以使其发挥作用:

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

这是一个使用此设置的示例项目:

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


3
投票

对于多个模块项目

sourceSets {
        test.java.srcDirs += ["${project(':module-name').projectDir}/src/sharedTest/java",
                              "src/test/java"]
    }

1
投票

接受的答案似乎不再适用于 Android Studio Chipmunk...

这是一种(不理想的)解决方法:

android {  
  sourceSets.main.java.srcDirs += "$projectDir/src/testShared/java"
}

0
投票

尝试手动分配源集:

sourceSets {
  val sharedTestDir = file("src/sharedTest/java")
  getByName("test").java.srcDirs(sharedTestDir)
  getByName("androidTest").java.srcDirs(sharedTestDir)
}
© www.soinside.com 2019 - 2024. All rights reserved.