如何在 Android 库项目中按测试类型分隔源文件?
How to separate source files per test type in an Android library project?
我按照 gradle docs 在 Java 项目中按测试类型分隔源文件,我想在 Android 库项目中做同样的事情。默认情况下 Android 插件 com.android.library
支持两种类型的测试目录 test
和 androidTest
。如何在 test
之后添加我想要 运行 的 integTest
?
sourceSets {
integTest {
java.srcDir file('src/integTest/java')
resources.srcDir file('src/integTest/resources')
}
}
当我尝试将上面的 sourceSet
添加到 build.gradle
时,出现错误
ERROR: The SourceSet 'integTest' is not recognized by the Android
Gradle Plugin. Perhaps you misspelled something?
由于Android Gradle 插件不支持像Java 插件那样的自定义sourceSets
,请问还有其他方法可以解决这个问题吗?
错误的主要原因是在 android
内为 integTest
定义了 sourceSet
,只需将其移到外面即可解决问题。请参阅下面的正确 build.gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
sourceSets {
integTest {
java.srcDir file('src/integTest/java')
resources.srcDir file('src/integTest/resources')
}
}
configurations {
integTestCompile.extendsFrom testCompile
integTestRuntime.extendsFrom testRuntime
}
task integTest(type: Test) {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = 'Runs the integration tests.'
testClassesDirs = sourceSets.integTest.output.classesDirs
classpath = sourceSets.integTest.runtimeClasspath
}
check.dependsOn integTest
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
integTestImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
我按照 gradle docs 在 Java 项目中按测试类型分隔源文件,我想在 Android 库项目中做同样的事情。默认情况下 Android 插件 com.android.library
支持两种类型的测试目录 test
和 androidTest
。如何在 test
之后添加我想要 运行 的 integTest
?
sourceSets {
integTest {
java.srcDir file('src/integTest/java')
resources.srcDir file('src/integTest/resources')
}
}
当我尝试将上面的 sourceSet
添加到 build.gradle
时,出现错误
ERROR: The SourceSet 'integTest' is not recognized by the Android Gradle Plugin. Perhaps you misspelled something?
由于Android Gradle 插件不支持像Java 插件那样的自定义sourceSets
,请问还有其他方法可以解决这个问题吗?
错误的主要原因是在 android
内为 integTest
定义了 sourceSet
,只需将其移到外面即可解决问题。请参阅下面的正确 build.gradle
apply plugin: 'com.android.library'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 23
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
sourceSets {
integTest {
java.srcDir file('src/integTest/java')
resources.srcDir file('src/integTest/resources')
}
}
configurations {
integTestCompile.extendsFrom testCompile
integTestRuntime.extendsFrom testRuntime
}
task integTest(type: Test) {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = 'Runs the integration tests.'
testClassesDirs = sourceSets.integTest.output.classesDirs
classpath = sourceSets.integTest.runtimeClasspath
}
check.dependsOn integTest
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
testImplementation 'junit:junit:4.12'
integTestImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}