Gradle 单元测试
我们可以通过在 Gradle 添加 Java 插件来执行单元测试的任务,默认的,在项目中所有的测试都会被执行,如果我们只想测试其中一个类,我们可以使用 Java 系统属性 test.single
作为测试的名字,事实上,这个系统属性的模式是 taskName.single
,其中 taskName
是我们工程中单元测试类型的名称。
以下将会看到我们如何构建单元测试
1.创建 Gradle 工程,并在 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 output
events 'started', 'passed'
}
}
2.第二步,我们创建一个测试类,每个测试类一个测试方法,这样子让我们可以在后面单独的调用他们
// 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");
}
}
3.为了只执行 SampleTest 类中的测试方法,我们必须从命令行中以 Java 系统属性 -Dtest.single=Sample
来执行单元测试
$ 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
4.注意,现在只有一个测试类被执行,Gradle 将会使用查询以 **/<Java system property value=Sample>*
模式的类中查询出测试方法,因此我们不必要写该测试类的全类名,为了只执行 AnotherSampleTest 测试类我们也是如此:
$ 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
5.我们也可以使用 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 :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
6.为了证明 Java 的系统属性同样对其他测试类型起作用,我们在 buile.gradle 配置文件中加入了新的 task,我们把它叫做 sampleTest 并且包含了我们的测试文件,我们同样的使用了 testLogging 方便看测试结果在控制台的输出
// 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' } }
7.下一步我们想运行 SampleTest 类的单元测试,现在我们可以使用 -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 :sampleTest com.mrhaki.gradle.SampleTest > sample STARTED com.mrhaki.gradle.SampleTest > sample PASSED BUILD SUCCESSFUL Total time: 10.677 secs Code written with Gradle 1.6
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论