Android Espresso测试(用Kotlin编写)无法查看主类和包

时间:2016-12-05 19:11:10

标签: android kotlin android-espresso

我对Kotlin Espresso测试有一个问题。我在模块的构建脚本中应用了Kotlin-Android Gradle插件,测试在Android Studio中运行没有问题(测试类由AndroidJUnit4运行器注释并运行),但运行Gradle任务“assembleDebugAndroidTest”来自终端无法找到我的主类和包(测试中使用的类)。它会引发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
}

Project的构建脚本:

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版本。

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

1 个答案:

答案 0 :(得分:1)

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

对于assembleDebugAndroidTest,请确保先运行assembleDebug

从命令行,可以使用gradle" dry run"快速检查任务的顺序。像这样:

./gradlew assembleDebugAndroidTest -m

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

afterEvaluate {
  compileDebugAndroidTestKotlin.dependsOn assembleDebug
}