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



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

多亏了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
    }
  }
}

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

编辑(20022-08-15):这不再有效,关于为什么的讨论,以及(现在)推荐的实现代码共享的方法,参见这个问题和公认的答案:test和androidTest之间共享srcDirs,升级到Android Studio Chipmunk (IntelliJ 2021.2.1)后未解决的引用

通过公共文件夹和源代码集共享代码不再适用于Android Studio花栗鼠。但是,还有另一种方法可以让它工作:

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

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

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

对于多个模块项目

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

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

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

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

尝试手动分配源集:

sourceSets {
  val sharedTestDir = file("src/sharedTest/java")
  getByName("test").java.srcDirs(sharedTestDir)
  getByName("androidTest").java.srcDirs(sharedTestDir)
}

相关内容

  • 没有找到相关文章

最新更新