组织androidTest和test之间的共享代码

时间:2017-11-06 16:06:10

标签: android android-gradle android-testing robolectric

我正在以gradle项目的形式构建一个android组件。要使用espresso框架在多个配置中测试我的组件UI,我在TestActivity源集中有一个androidTest,我可以使用它。

澄清文件树:

src/
    androidTest/
        java/my.package/
            TestActivity.kt
            ...
        res/layout/
            my_test_activitity.xml
    test/
        java/my.package/
            MyUnitTests.kt

现在我想开始使用robolectric进行部分单元测试,并从那里测试TestActivity。 有趣的是,当我在MyUnitTests.kt中设置Robolectric时,Android Studio不会抱怨:

val activity = Robolectric.setupActivity(TestActivity::class.java) // no error

但是,当我尝试运行单元测试时,gradle会向我显示此错误:

e: src/test/java/my.package/MyUnitTests.kt: Unresolved reference: TestActivity

我的猜测是test源集无法访问androidTest源集,即使Android Studio似乎认为它已经存在。

如何解决此问题(使androidTest中的类和资源可以从test访问)?在仪器测试和单元测试之间共享代码时,这是否是正确的方法,还是有更好的方法?

1 个答案:

答案 0 :(得分:3)

我经常通过创建一个src / commonTest / java源集来解决这个问题,并通过将以下内容添加到我的gradle文件中将其暴露给检测测试和单元测试:

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