Мы можем запустить тестовый код с 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.gradleapply 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.javapackage 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.javapackage 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.gradleapply 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