Android Espresso 测试(用 Kotlin 编写)看不到 main 类 和 packages

Android Espresso tests (written in Kotlin) cannot see main classes and packages

我对 Kotlin Espresso 测试有疑问。我在模块的构建脚本中应用了 Kotlin-Android Gradle 插件,并且在 Android Studio 中测试 运行 没有问题(测试 class 被注释并且 运行 由 AndroidJUnit4 运行ner),但是 运行从终端执行 Gradle 任务“assembleDebugAndroidTest”无法找到我的主要 classes 和包(classes 在测试中使用)。它抛出一个 Unresolved Reference 错误。

这里是构建脚本的 sourceSets 部分:

sourceSets {

    androidTest {
      java.srcDir 'src/sharedTestUtils/java'
      java.srcDir 'src/acceptanceTests/java'
      java.srcDir 'src/functionalTests/java'
      java.srcDir 'src/sharedTestUtils/kotlin'
      java.srcDir 'src/acceptanceTests/kotlin'
      java.srcDir 'src/functionalTests/kotlin'
    }

    acceptanceTests {
      java.srcDir 'src/sharedTestUtils/java'
      java.srcDir 'src/sharedTestUtils/kotlin'
    }

    // source sets for Kotlin
    // main.java.srcDirs += 'src/main/kotlin'
    test.java.srcDirs += 'src/test/kotlin'

} 

并测试模块中的依赖关系:

apply plugin: 'kotlin-android'

dependencies {
    androidTestCompile deps.kotlin
    androidTestCompile deps.kotlinTest
    androidTestCompile deps.kotlinTestJunit
}

项目的构建脚本:

ext.deps = [
    kotlin                : "org.jetbrains.kotlin:kotlin-stdlib:$ver.kotlin",
    kotlinTest            : "org.jetbrains.kotlin:kotlin-test:$ver.kotlin",
    kotlinTestJunit       : "org.jetbrains.kotlin:kotlin-test-junit:$ver.kotlin"
]

我使用的是 Kotlin 1.0.5-2 版。

我们有一个自定义测试 运行ner 作为 testInstrumentationRunner 它注册了一些空闲资源和一些 activity 钩子用于解锁设备屏幕和获取唤醒锁,并使用 TestButler 禁用动画和稳定测试。但是,测试使用 Espresso jUnit 4 运行ner (@RunWith(AndroidJUnit4::class)) 注释。但 Android Studio 运行 的测试没有任何问题这一事实令人困惑。

kotlin 测试编译任务需要 运行 在相关 assemble 任务之后 class 引用才能正常工作。

对于 assembleDebugAndroidTest,首先确保 assembleDebug 是 运行。

在命令行中,可以使用 gradle“dry run”快速检查任务的顺序,如下所示:

./gradlew assembleDebugAndroidTest -m

如果assembleDebug顺序不正确。您可以通过将以下内容添加到构建文件来修复顺序:

afterEvaluate {
  compileDebugAndroidTestKotlin.dependsOn assembleDebug
}