Запуск юнит-тестов только на одном варианте сборки с Gradle
У меня есть многомерный проект для Android, который требует много времени для сборки и тестирования. У меня есть двумерное определение Flaver. первое измерение имеет 2 значения проекта, второе измерение имеет 4 определения среды, и существует 3 типа сборки.
в результате 2x4x3 = 24 варианта сборки. Я хотел бы оптимизировать таким образом, что будет собран только один вариант сборки и только один вариант сборки будет использован для запуска юнит-тестов в ci-среде.
build.gradle
android {
// more configurations
flavorDimensions "project", "environment"
productFlavors {
basic {
dimension "project"
}
advanced {
dimension "project"
}
flavorDevelopment {
dimension "environment"
applicationId "ch.myproject.app.development"
}
flavorTest {
dimension "environment"
applicationId "ch.myproject.app.test"
}
flavorIntegration {
dimension "environment"
applicationId "ch.myproject.app.integration"
}
flavorProduction {
dimension "environment"
applicationId "ch.myproject.app.production"
}
buildTypes {
debug {
testCoverageEnabled = true
minifyEnabled = false
shrinkResources = false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
debugInstantRun.initWith(buildTypes.debug)
debugInstantRun {
// we are changing this build variant later on runtime, so that it will use constant values
// for versionCode and versionName in the Manifest, for make sure the
// manifest is unchanged between the instantRun builds
// Specifies a sorted list of fallback build types that the
// plugin should try to use when a dependency does not include a
// "debugInstantRun" build type. You may specify as many fallbacks as you
// like, and the plugin selects the first build type that's
// available in the dependency.
matchingFallbacks = ['debug']
}
release {
// Currently all environments (dev/test/int/prod) are signed by the Production certificates
minifyEnabled = false
shrinkResources = false
}
}
// more configurations
} // end of android
Я бы все сначала почистил, gradlew clean --refresh-dependencies
затем просто собирая варианты отладки, gradlew assembleDebug
и затем я пытаюсь запустить только unittest на одном варианте отладки: gradlew testAdvancedFlavorDevelopmentDebugUnitTest
-> Это не работает
если я бегу gradlew test
все варианты сборки собраны (кроме типов сборки Release), тесты работают, но это занимает много времени!
также пытался gradlew testDebugUnitTest
-> не работает
Я думаю, что я мог бы переместить unittests в другой каталог, чем тест, например, testAdvancedFlavorDevelopment тогда, когда я бы ввел gradlew test
только тесты для testAdvancedFlavorDevelopmentDebug и testAdvancedFlavorDevelopmentDebugInstantRun будут запущены.
Но должен быть способ поместить тесты в каталог тестов и принудительно выполнить команду gradlew, чтобы просто скомпилировать и протестировать только один конкретный вариант сборки! Есть идеи?
Тиа Люк
0 ответов
Попробуйте ./gradlew: ModuleName: test VariantName DebugUnitTest, также вы можете найти на вкладке Gradle все возможные задачи UnitTest, которые вы можете выполнить.