Статьи

Gradle Goodness: запуск одного теста

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

Ссылка: Gradle Goodness: Проведение одиночного теста от нашего партнера JCG Хьюберта Иккинка в блоге JDriven .