Мы можем запустить тестовый код с Gradle, используя test
задание, добавляемое плагином Java. По умолчанию все тесты, найденные в проекте, выполняются. Если мы хотим запустить один тест, мы можем использовать системное свойство Java test.single
с именем теста. На самом деле шаблон для системного свойства — taskName .single
. taskName
— это имя задачи типа Test
в нашем проекте. Мы увидим, как мы можем использовать это в наших сборках.
Сначала мы создадим простой файл build.gradle
для запуска наших тестов:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
// File: build.gradle apply plugin: 'java' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:[4,)' } test { testLogging { // Show that tests are run in the command-line output events 'started' , 'passed' } } |
Затем мы создаем два тестовых класса с каждым отдельным тестовым методом, просто чтобы продемонстрировать, что позже мы сможем вызвать их как отдельный тест.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
// File: src/test/java/com/mrhaki/gradle/SampleTest.java package com.mrhaki.gradle; import static org.junit.Assert.*; import org.junit.*; public class SampleTest { @Test public void sample() { assertEquals( "Gradle is gr8" , "Gradle is gr8" ); } } |
01
02
03
04
05
06
07
08
09
10
11
12
|
// File: src/test/java/com/mrhaki/gradle/AnotherSampleTest.java package com.mrhaki.gradle; import static org.junit.Assert.*; import org.junit.*; public class AnotherSampleTest { @Test public void anotherSample() { assertEquals( "Gradle is great" , "Gradle is great" ); } } |
Чтобы запустить только SampleTest
мы должны вызвать test
задание из командной строки с системным свойством Java -Dtest.single=Sample
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
$ gradle -Dtest.single=Sample test :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :compileTestJava :processTestResources UP-TO-DATE :testClasses :test com.mrhaki.gradle.SampleTest > sample STARTED com.mrhaki.gradle.SampleTest > sample PASSED BUILD SUCCESSFUL Total time: 11.404 secs |
Обратите внимание, что сейчас выполняется только один тест. Gradle получит значение Sample и использует его в следующем шаблоне ** / <значение системного свойства Java = Sample> *. Class, чтобы найти тестовый класс. Поэтому нам не нужно вводить полный пакет и имя класса нашего единственного тестового класса. Чтобы вызвать только тестовый класс AnotherSampleTest
мы запускаем test
задание с другим значением для свойства Java systme:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
$ gradle -Dtest.single=AnotherSample test :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :compileTestJava :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test com.mrhaki.gradle.AnotherSampleTest > anotherSample STARTED com.mrhaki.gradle.AnotherSampleTest > anotherSample PASSED BUILD SUCCESSFUL Total time: 5.62 secs |
Мы также можем использовать шаблон для системного свойства Java для запуска нескольких тестов, которые применяются к шаблону. Например, мы можем использовать * Sample для запуска как SampleTest
и SampleTest
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
$ gradle -Dtest.single=*Sample test :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :compileTestJava :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test com.mrhaki.gradle.AnotherSampleTest > anotherSample STARTED com.mrhaki.gradle.AnotherSampleTest > anotherSample PASSED com.mrhaki.gradle.SampleTest > sample STARTED com.mrhaki.gradle.SampleTest > sample PASSED BUILD SUCCESSFUL Total time: 5.605 secs |
Чтобы показать, что системное свойство Java также работает для других задач типа Test
мы добавляем новую задачу в наш файл build.gradle
. Мы sampleTest
задачу sampleTest
и включаем наши тесты. Мы также применяем тот же testLogging
сейчас ко всем задачам с типом Test
чтобы мы могли видеть результат.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
// File: build.gradle apply plugin: 'java' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:[4,)' } task sampleTest(type: Test, dependsOn: testClasses) { include '**/*Sample*' } tasks.withType(Test) { testLogging { events 'started' , 'passed' } } |
Далее мы хотим запустить только класс SampleTest
, но теперь мы используем системное свойство Java -DsampleTest.single=S*
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
$ gradle -DsampleTest.single=S* sampleTest :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :compileTestJava UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :sampleTest com.mrhaki.gradle.SampleTest > sample STARTED com.mrhaki.gradle.SampleTest > sample PASSED BUILD SUCCESSFUL Total time: 10.677 secs |
Код написанный с Gradle 1.6