整理androidTest和test之间的共享代码
Organize shared code between androidTest and test
我正在以 gradle 项目的形式构建一个 android 组件。为了使用 espresso 框架在多个配置中测试我的组件 UI,我在 androidTest
源集中有一个 TestActivity
,我可以检测它。
阐明文件树:
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
访问)?在仪器测试和单元测试之间共享代码时,这甚至是正确的方法还是有更好的方法?
我经常通过创建一个 src/commonTest/java 源集来解决这个问题,并通过将以下内容添加到我的 gradle 文件来将其暴露给仪器测试和单元测试:
android {
sourceSets {
String sharedTestDir = 'src/commonTest/java'
test {
java.srcDir sharedTestDir
}
androidTest {
java.srcDir sharedTestDir
}
}
}
公认的解决方案非常适合普通 Gradle 脚本。然而,对于任何使用 Gradle Kotlin DSL(*.kts 文件)的人来说,这应该可以解决问题。
sourceSets {
val sharedTestDir = "src/sharedTest/java"
getByName("test") {
java.srcDir(sharedTestDir)
}
getByName("androidTest") {
java.srcDirs(sharedTestDir)
}
}
我正在以 gradle 项目的形式构建一个 android 组件。为了使用 espresso 框架在多个配置中测试我的组件 UI,我在 androidTest
源集中有一个 TestActivity
,我可以检测它。
阐明文件树:
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
访问)?在仪器测试和单元测试之间共享代码时,这甚至是正确的方法还是有更好的方法?
我经常通过创建一个 src/commonTest/java 源集来解决这个问题,并通过将以下内容添加到我的 gradle 文件来将其暴露给仪器测试和单元测试:
android {
sourceSets {
String sharedTestDir = 'src/commonTest/java'
test {
java.srcDir sharedTestDir
}
androidTest {
java.srcDir sharedTestDir
}
}
}
公认的解决方案非常适合普通 Gradle 脚本。然而,对于任何使用 Gradle Kotlin DSL(*.kts 文件)的人来说,这应该可以解决问题。
sourceSets {
val sharedTestDir = "src/sharedTest/java"
getByName("test") {
java.srcDir(sharedTestDir)
}
getByName("androidTest") {
java.srcDirs(sharedTestDir)
}
}