Запуск юнит-тестов только на одном варианте сборки с 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, которые вы можете выполнить.

Другие вопросы по тегам