我们可以使用Java插件添加的test
任务,使用Gradle运行测试代码。 默认情况下,将执行项目中找到的所有测试。 如果要运行单个测试,则可以使用Java系统属性test.single
和测试名称。 实际上,系统属性的模式是taskName .single
。 taskName
是我们项目中Test
类型的任务的名称。 我们将看到如何在构建中使用它。
首先,我们创建一个简单的build.gradle
文件来运行测试:
// File: build.gradle
apply plugin: 'java'repositories {mavenCentral()
}dependencies {testCompile 'junit:junit:[4,)'
}test {testLogging {// Show that tests are run in the command-line outputevents 'started', 'passed'}
}
接下来,我们创建两个测试类,每个类都有一个单独的测试方法,只是为了说明我们以后可以将它们作为单个测试来调用。
// 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");}}
// 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
我们必须使用Java系统属性-Dtest.single=Sample
从命令行调用test
任务:
$ gradle -Dtest.single=Sample test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava
:processTestResources UP-TO-DATE
:testClasses
:testcom.mrhaki.gradle.SampleTest > sample STARTEDcom.mrhaki.gradle.SampleTest > sample PASSEDBUILD SUCCESSFULTotal time: 11.404 secs
请注意,现在仅执行一个测试。 Gradle将获取值Sample ,并在以下模式中使用它** / <Java系统属性value = Sample> *。class来查找测试类。 因此,我们不必键入单个测试类的完整软件包和类名。 要仅调用AnotherSampleTest
测试类,我们使用Java systme属性的其他值运行test
任务:
$ 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
:testcom.mrhaki.gradle.AnotherSampleTest > anotherSample STARTEDcom.mrhaki.gradle.AnotherSampleTest > anotherSample PASSEDBUILD SUCCESSFULTotal time: 5.62 secs
我们还可以对Java系统属性使用模式,以运行适用于该模式的多个测试。 例如,我们可以使用* Sample来运行SampleTest
和AnotherSampleTest
:
$ 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
:testcom.mrhaki.gradle.AnotherSampleTest > anotherSample STARTEDcom.mrhaki.gradle.AnotherSampleTest > anotherSample PASSEDcom.mrhaki.gradle.SampleTest > sample STARTEDcom.mrhaki.gradle.SampleTest > sample PASSEDBUILD SUCCESSFULTotal time: 5.605 secs
为了显示Java系统属性也适用于Test
类型的其他任务,我们将一个新任务添加到build.gradle
文件中。 我们将任务命名为sampleTest
并包括我们的测试。 现在,我们还将相同的testLogging
应用于Test
类型的所有任务,以便我们看到输出。
// 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*
:
$ 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
:sampleTestcom.mrhaki.gradle.SampleTest > sample STARTEDcom.mrhaki.gradle.SampleTest > sample PASSEDBUILD SUCCESSFULTotal time: 10.677 secs
用Gradle 1.6编写的代码
翻译自: https://www.javacodegeeks.com/2013/05/gradle-goodness-running-a-single-test.html