Как провести тестирование интеграции на Android с новой системой сборки Gradle?

Наше Android-приложение нуждается в автоматическом тестировании, и наша группа использует Robotium для обработки этого для нас. Это не проблема для модульных тестов, но мы также пишем набор комплексных тестов интеграции, чтобы реализовать не только клиентские серверы. У меня есть некоторые тесты, которые делают это, но если это возможно, я хотел бы разбить их отдельно от модульных тестов, чтобы наши непрерывные сборки интеграции не требовали запускать живой сервер для завершения.

Мы используем блестящую новую систему сборки Gradle. Мне интересно, могу ли я сделать что-то вроде тестового теста или подпроекта, который зависит от родительского APK, чтобы заставить его пойти. Я попытался выполнить эту работу с отдельным проектом в целом с помощью инструкций Robotium для тестирования отладочной APK без потерь, но это не сработало. Может быть, потому, что я был на реальном оборудовании, а не на эмуляторе. Мне не повезло с эмулятором, даже с установленным аппаратным ускорением.

Любые советы, или я просто задерживаю дыхание и откатываюсь с моими сборками, требующими, чтобы сервер интеграции был доступен, когда происходят сборки?

Ответ 1

В соответствии с их инструкциями Maven все, что вам нужно сделать, это добавить robotium-solo в качестве зависимости от компиляции.

repositories {
    mavenCentral()
}

dependencies {
    instrumentTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'
}

Это обеспечит наличие файла robotium-solo.jar в вашем пути к классам. Затем определите свои тесты в каталоге src/instrumentTest и запустите gradle build. Смотрите, работает ли это?

Я помогу, где смогу, поскольку мы преобразовали из maven в gradle примерно год назад.

* EDIT OP хотел, чтобы тесты выполнялись отдельно от сборки gradle, поэтому решение должно указать настраиваемый источник, например:

sourceSets {
    integrationTest {
        // Gives you access to the compiled classes in your tests
        compileClasspath += main.output
        runtimeClasspath += main.output
    }
}

dependencies {
    integrationTestCompile 'com.jayway.android.robotium:robotium-solo:4.2'
}

// To run the tests: ./gradlew integrationTest
task integrationTest(type: Test) {
    testClassesDir = sourceSests.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}

Примечание. На этом компьютере не установлен SDK для Android. Если main.output не работает, попробуйте с andriod.sourceSets.main.output и посмотрите, работает ли это.