Збентежений щодо testCompile та androidTestCompile в Android Gradle


87

Я новачок у світі тестування і тим більше у світі тестування Android. Виконуючи дослідження Robolectric, яке допомагає тестувати андроїд, одне мене бентежить найбільше. Іноді в Інтернеті я бачу людей, які використовують testCompileключове слово в залежностях сценарію побудови gradle, коли посилаються на Robolectric, тоді як інші використовують androidTestCompile. Звичайно, обидва не можуть бути дійсними?

Хтось може пояснити різницю між ними і тим, який із них повинен бути тим, що використовується при використанні Robolectric?

Відповіді:


120

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

Оновлення: Основною відмінністю між ними є те, що testнабір джерел працює в звичайній Java JVM, тоді як androidTestтести набору джерел виконуються на пристрої Android (або емуляторі).


Дякую. Це те, що я зрозумів спочатку, але якщо це так, чому деякі посилання на роболектричну залежність за допомогою testCompile, а деякі - для androidTestCompile. Хіба це не бібліотека, яка допомагає писати інтеграційні тести? Якщо так, то чи не слід посилатися на це з androidTestCompile? Однак навіть офіційний путівник robolectric наказує використовувати testCompile ... Вибачте, але це мене занадто бентежить на даний момент, як ви бачите.
Лукас

3
Конвенції про іменування трохи дивні. В основному, якщо ви пишете модульні тести (тести, які не запускатимуться на пристрої), тоді вони існуватимуть у 'src / test', і тому їх залежності належать до testCompileконфігурації. Залежності, додані до androidTestCompileконфігурації, будуть доступні лише для джерела в 'src / androidTest', яке фактично вбудовано в файл .apk і розгорнуто на пристрої.
Марк Вієйра

Дякую, що вказали мені якийсь напрямок. Це не дало відповіді на всі мої запитання, але мені допомогло під час мого дослідження. Щоб лише пояснити, що ви сказали, модульні тести - це не лише тести в тестовій папці (за замовчуванням). Іронічно, Google іноді називає тести, розташовані в androidTest, також як модульні тести. Звичайно, це залежить від мети конкретного тесту, але все одно додає сумніву.
Лукас

1
Це в основному семантика, тому я не став би на них зависати. Багато тестів, написаних за допомогою Roboelectric, є, безперечно, інтеграційними тестами, а не модульними. З огляду на це, основною відмінністю між ними є те, що 'src / test' працює на машині розробників у стандартній JVM, а 'src / androidTest' упакований у файл APK і працює на реальному пристрої (або емуляторі).
Марк Вієйра

1
Я думаю, що підтримка 'src / test', яку ви бачили раніше, була просто такою, яка була доступна за допомогою стандартного плагіна Gradle Java. Таким чином, не було підтримки для побудови смаків або типів. Тепер плагін Android має повну підтримку модульних тестів, включаючи набори джерел модульних тестів для кожного варіанта.
Mark Vieira

3

Щоб відповісти на ваше запитання - скористайтеся testCompile для роболектрика

чому, тому що robolectric працює на JVM, висміюючи всю поведінку пристрою Android.

testCompile та androidTestCompile - це "за домовленістю" папки Android, які gradle використовує під час запуску завдань, наданих плагіном android.

androidTestDebug бере тести з папки androidTest, testDebug бере тести з папки тесту,

Знову ж таки, лише за папками конвенцій ви можете вказати набори джерел для цих конфігурацій

Примітка: еспресо - це така приголомшлива бібліотека, спробуй відійти від роболектрика :)


1

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

testCompile 'junit:junit:4.12'

Наведений вище код - це залежність JUnit 4 у файлі build.gradle в android studio. Ви бачите, що він має testCompile, оскільки JUnit працює на JVM і не вимагає запуску пристрою чи емулятора. Це також означає, що для тестів JUnit не потрібно буде запускати контекст програми, і якщо вони вимагають, нам потрібно буде "МЕКУВАТИ" їх.

// Інструментоване одиничне тестування

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

Тепер ми бачимо тут androidTestCompile, оскільки цього разу ми маємо намір використовувати пристрій або емулятор для тестів, тобто тестування інструментарію. Для кращих роз’яснень я б запропонував прочитати з developer.android.com


0

Щоб додати залежність для тестування JVM або модульного тестування (тестування покладається лише на середовище Java, нам не потрібно жодне середовище Android).

Ми використовуємо директиву testCompile. Приклад:

dependencies {
    testCompile gradleTestKit()
}

Щоб додати тест залежності для контрольно-вимірювальних приладів (ті, хто тестує переважно на середовище Android), ми використовуємо androidTestCompileдирективу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.