/ / Tarefa de teste de integração separada em gradle com android - android, testing, gradle, android-gradle

Tarefa de teste de integração separada no gradle com android - android, teste, gradle, android-gradle

Eu quero executar testes que tenham a "integração"palavra no caminho a ser excluída com a execução de teste padrão, mas desejo executá-las todas juntas em uma tarefa separada. Atualmente, tenho uma configuração básica de teste:

sourceSets {
androidTest.setRoot("src/test")

integrationTest.setRoot("src/test")
}

...

androidTestCompile "junit:junit:4.11"
androidTestCompile "com.jayway.android.robotium:robotium-solo:5.1"
androidTestCompile files("libs/android-junit-report-1.5.8.jar")
androidTestCompile "com.squareup:fest-android:1.0.8"
androidTestCompile "org.robolectric:robolectric:2.3"

integrationTestCompile "junit:junit:4.11"
integrationTestCompile "com.jayway.android.robotium:robotium-solo:5.1"
integrationTestCompile files("libs/android-junit-report-1.5.8.jar")
integrationTestCompile "com.squareup:fest-android:1.0.8"
integrationTestCompile "org.robolectric:robolectric:2.3"

...

androidTest {
include "**/*Test.class"
exclude "**/espresso/**/*.class"
exclude "**/integration/**"
}

task integrationTest(type: Test) {
include "**/integration/**"
}

Isso causa um erro ao sincronizar o gradle no AS:

Warning: project ":ProjectName": Unable to resolve all content root directories
Details: java.lang.NullPointerException: null

mas se eu remover a tarefa integrationTest, ela não ocorrerá. Também com a tarefa presente, eu posso executar a tarefa "integrationTest", mas isso causa outro erro:

Error:Could not determine the dependencies of task ":ProjectName:integrationTest".
A base directory must be specified in the task or via a method argument!

Respostas:

1 para resposta № 1

Não é totalmente óbvio, mas esse erro é causado por não definir testClassesDir na sua definição de tarefa.

task integrationTest(type: Test) {
include "**/integration/**"
testClassesDir = file("build/intermediates/classes")
}

Algo semelhante é descrito no Guia do usuário Gradle para o plug-in Java, mas ele não se traduz inteiramente no plug-in Android. Ainda não resolvi todos os detalhes, mas atualizarei esta resposta à medida que a descobrir.