2015-03-12 2 views
81

Я новичок в мире тестирования и даже больше в мире тестирования Android. В то время как исследования Robolectric, которые помогают с испытаниями на Android, одна вещь меня путает больше всего. Иногда в Интернете я вижу людей, использующих ключевое слово testCompile в зависимостях сценария построения градиента при ссылке на Robolectric, в то время как другие используют androidTestCompile. Конечно, оба не могут быть действительными?Confused about testCompile and androidTestCompile в Android Gradle

Может ли кто-нибудь объяснить разницу между обоими и какие из них должны быть использованы при использовании Robolectric?

ответ

114

Просто testCompile конфигурация для модульных тестов (те, которые расположены в SRC/тест) и androidTestCompile используется для тестового API (которая размещается в SRC/androidTest). Поскольку вы собираетесь писать модульные тесты, вы должны использовать testCompile.

Update: Основное различие между ними состоит в том, что test sourceset работает в обычной Java JVM, в то время как androidTest sourceset тесты работать на Android устройстве (или эмуляторе).

+0

Спасибо. Сначала это я понял, но если это так, то почему-то эталонная зависимость robolectric с testCompile и некоторые с androidTestCompile. Разве это не библиотека, которая помогает писать интеграционные тесты? Если да, то не следует ли ссылаться на androidTestCompile? Однако даже официальное руководство robolectric направляет использовать testCompile ... Извините, но это просто слишком запутывает для меня в этот момент, как вы можете видеть. – Lucas

+2

Соглашения об именах немного странные.В принципе, если вы пишете модульные тесты (тесты, которые не будут выполняться на устройстве), то они будут существовать в 'src/test', и поэтому их зависимости принадлежат конфигурации 'testCompile'. Зависимости, добавленные в конфигурацию 'androidTestCompile', будут доступны только для источника в 'src/androidTest', который фактически встроен в APK и развернут на устройстве. –

+0

Спасибо, что указал мне в каком-то направлении. Он не ответил на все мои вопросы, но это помогло мне во время моих исследований. Чтобы уточнить, что вы сказали, Unit Test - это не только те, которые находятся в тестовой папке (по умолчанию). Иронически google вызывает иногда тесты, находящиеся в androidTest, также как Unit Test. Зависит от цели для конкретного теста, но все же добавляет к конфуции. – Lucas

3

Чтобы ответить на ваш вопрос - Использовать testCompile для robolectric

почему, потому что robolectric работает на JVM насмешливый все поведение андроида устройства.

testCompile and androidTestCompile - это «по соглашению» папки для Android, которые используются во время выполнения задач, предоставляемых плагином Android.

androidTestDebug выбирает тесты из папки androidTest, testDebug выбирает тесты из тестовой папки,

Опять же это только по соглашению папки, которые вы можете дать наборы исходных для этих конфигураций

Примечание: эспрессо такая огромная библиотека попытаться отойти от robolectric :)

0

// модульного тестирования

testCompile 'junit:junit:4.12' 

Вышеприведенный код является зависимостью JUnit 4 в файле build.gradle в студии android. Вы видите, что у него есть testCompile, beacuse JUnit работает на JVM и не требует запуска устройства или эмулятора. Это также означает, что тесты JUnit не потребуют запуска контекста приложения, и если они потребуют, нам нужно будет «MOCK» их.

// Insturmented Модульное тестирование

androidTestCompile('com.android.support.test:runner:0.5', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 

Теперь мы видим androidTestCompile здесь, потому что на этот раз мы намерены использовать устройство или эмулятор для испытаний, то есть тестирование приборов. Для уточнения счетчика я предлагаю прочитать от developer.android.com