Аргументы Runner инструментария тестирования Android, установленные на этапе выполнения - PullRequest
0 голосов
/ 19 мая 2018

Я пытаюсь создать задачи gradle для запуска только подмножества тестов, основанных на аннотациях, которые подробно описаны в в gradle dsl .Я пытаюсь установить testInstrumentationRunnerArguments на этапе выполнения gradle.Несмотря на то, что я успешно устанавливаю аргументы, похоже, что он фактически не выполняет никакой фильтрации.

У нас есть тесты, расположенные в другом пути набора источников, но мы добавили их в стандартный набор androidTest источника.Все тесты выполняются, они просто не фильтруются.

Тогда у меня возникают следующие вопросы: можно ли динамически задавать аргументы теста на этапе выполнения gradle или их нужно устанавливать на этапе настройки?Если они могут быть установлены во время выполнения, может ли кто-нибудь указать, почему не работает приведенный ниже gradle?

Вот мой test.gradle, который применяется после закрытия конфигурации библиотеки Android.

/*
 * Copyright (c) 2018 company. All rights reserved.
 */

ext {
    integrationTest = false
    networkIntegrationTest = false
}

android.sourceSets {
    androidTest {
        java {
            // add our custom test source sets so android studio gives us good tooling
            srcDirs += './src/integrationNetworkTest/java'
            srcDirs += './src/integrationTest/java'
        }
        res {
            srcDirs += './src/integrationNetworkTest/res'
            srcDirs += './src/integrationTest/res'
        }
    }
}

tasks.whenTaskAdded { task ->
    def name = task.name.toLowerCase()
    if(name.contains('connectedcheck') || task.name.matches("connected([a-zA-Z]?)+AndroidTest")) {
        task.doFirst {
            if(!integrationTest && !networkIntegrationTest) {
                android.productFlavors.each {
                    it.testInstrumentationRunnerArguments.put('notAnnotation',
                    'com.company.android.infrastructure.test.IntegrationTest,com.company.android.infrastructure.test.IntegrationNetworkTest')
                }
            }
            else {
                StringBuilder sb = new StringBuilder()
                if(integrationTest && networkIntegrationTest) {
                    sb.append('com.company.android.infrastructure.test.IntegrationTest')
                    sb.append(',')
                    sb.append('com.company.android.infrastructure.test.IntegrationNetworkTest')
                }
                else if (integrationTest) {
                    sb.append('com.company.android.infrastructure.test.IntegrationTest')
                }
                else if (networkIntegrationTest) {
                    sb.append('com.company.android.infrastructure.test.IntegrationNetworkTest')
                }
                if(integrationTest || networkIntegrationTest) {
                    android.productFlavors.each {
                        it.testInstrumentationRunnerArguments.put('annotation', sb.toString())
                    }
                }
            }

            android.productFlavors.each {
                println "${it.name} Test Annotations: ${it.testInstrumentationRunnerArguments}"
            }
        }
    }
}
project.afterEvaluate {
    android.libraryVariants.each { variant ->
        tasks.create("${variant.name}IntegrationTest") {
            group 'company'
            description 'Run company Integration tests with only network requests mocked'
            finalizedBy "connected${variant.name.capitalize()}AndroidTest"
            doLast {
                integrationTest = true
            }
        }

        tasks.create("${variant.name}IntegrationNetworkTest") {
            group 'company'
            description 'Run company Integration tests with real network requests'
            finalizedBy "connected${variant.name.capitalize()}AndroidTest"
            doLast {
                networkIntegrationTest = true
            }
        }
    }
}

Gradle: 4.1

Плагин Android: 3.0.1

* Редактировать: * Я думаю, это ошибка: Отслеживание ошибок Android

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...