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
}
我对 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
}