10

Я пытаюсь отделить интеграционные тесты в Android Studio 0.9.Отделив тесты интеграции от модульных тестов в Android Studio

Я добавил следующее в файл сборки:

sourceSets { 
    integrationTest { 
     java.srcDir file('src/integrationTest/java') 
    } 
} 

task integrationTest(type: Test) { 
    testClassesDir = sourceSets.integrationTest.output.classesDir 
    classpath = sourceSets.integrationTest.runtimeClasspath 
} 

Я столкнулся несколько вопросов:

  1. Задача будет работать, но это не имеет остальных доступных файлов проекта, поэтому я получаю ошибки в отношении отсутствующих классов. Есть некоторые Java конкретные решения, которые я нашел, такие как:

    Но я не мог понять, как заставить это работать с Android Studio. Различные комбинации main и main.output и играть с зависимостями, кажется, не работает, я получаю ошибки, такие как:

    Error:(33, 0) Could not find property 'main' on SourceSet container.. 
    

    Который имеет смысл, поскольку андроид плагин определяет свои собственные наборы исходных, но они не работают либо ,

  2. IDE не распознает каталог как источник исходного кода. В целях тестирования я изменил имя источника на androidTest, и он правильно получил значок зеленой папки, а тесты выполняются вместе с существующими модульными тестами, которые уже определены в androidTest.

+1

ли вы когда-нибудь, чтобы это работало? Я получаю аналогичные java-ошибки, а тестовый класс не обнаружил ошибок даже после следующих ссылок. – user484691

+0

В конце концов, я не смог заставить их работать как отдельные тестовые костюмы удовлетворительным образом, я просто использовал один тестовый костюм. – Philio

+0

Спасибо за обновление. Я не смог получить тесты в моем SDK-модуле для выполнения вообще. Есть что-то, чего я не вижу. Я попытался выполнить один тест, и я продолжаю получать класс, который не найден. – user484691

ответ

1

Я сделал именно такое разделение в Gradle, но для чистого Java-проекта, а не для Android. Вы не указываете путь к классам в наборах источников, что, я думаю, является проблемой. Вот соответствующая часть build.gradle:

sourceSets { 
    integration { 
     java { 
      compileClasspath += main.output + test.output 
      runtimeClasspath += main.output + test.output 
      srcDir file('src/integration/java') 
     } 
     resources { 
      srcDir 'src/integration/resources' 
     } 
    } 
} 

configurations { 
    integrationCompile.extendsFrom testCompile 
    integrationRuntime.extendsFrom testRuntime 
} 

task integrationTest(group: "verification", type: Test) { 
    testClassesDir = sourceSets.integration.output.classesDir 
    classpath = sourceSets.integration.runtimeClasspath 
} 
integrationTest.dependsOn testClasses 

IntelliJ идея поднимает папки в src/integration, если они имеют стандартные имена (Java, ресурсы).

+0

, к сожалению, это работает только для java-плагина, а не приложение для Android или библиотеки – Rule

1

Ответ @ sm4 действительно работает для модуля Java (с apply plugin: 'java'), но, к сожалению, не для Android-приложения (apply plugin: 'com.android.application'), ни для модулей библиотеки Android (apply plugin: com.android.library).

Но я нашел обходной путь:
Создание папки для интеграционных тестов:

src/integrationTest/java 
src/integrationTest/res 

Добавьте sourceSets для новых папок:

sourceSets { 
    integrationTest { 
     java { 
      srcDir file('src/integrationTest/java') 
     } 
     res { 
      srcDir file('src/integrationTest/res') 
     } 
    } 
} 

В чистом модуле Java папка java теперь станет зеленой, и значок папки res изменится. В модуле приложения/библиотеки Android этого нет.

Теперь создайте аромат продукта, идентично названный как папка, настроенная в sourceSet, и она работает!

productFlavors { 
    integrationTest { 
    } 
} 

И положить вишенку на вершине:

configurations { 
    integrationTestCompile.extendsFrom testCompile 
} 
Смежные вопросы