1. 程式人生 > >Gradle進階:2: 結合JUnit進行單體測試

Gradle進階:2: 結合JUnit進行單體測試

在這裡插入圖片描述
在前面一篇文章中介紹瞭如何在spring boot的專案中使用gradle進行構建,這篇文章將會給這個例子新增單體測試。

事前準備

環境準備

元件/框架 版本
JDK 1.8.0
Gradle 4.10.2
Spring Boot 2.1.1
liumiaocn:springboot liumiao$ gradle -v

------------------------------------------------------------
Gradle 4.10.2
------------------------------------------------------------

Build time:   2018-09-19 18:10:15 UTC
Revision:     b4d8d5d170bb4ba516e88d7fe5647e2323d791dd

Kotlin DSL:   1.0-rc-6
Kotlin:       1.2.61
Groovy:       2.4.15
Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM:          1.8.0_191 (Oracle Corporation 25.191-b12)
OS:           Mac OS X 10.14 x86_64

liumiaocn:springboot liumiao$

spring boot demo應用

建立的spring boot demo應用的詳細與說明,請參看:
xxx

目錄結構

使用https://start.spring.io/或者自己手動建立如下結構的目錄結構

liumiaocn:springboot liumiao$ tree 
.
├── build.gradle
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── liumiaocn
    │   │           └── springbootdemo
    │   │               └── SpringbootdemoApplication.java
    │   └── resources
    │       └── application.properties
    └── test
        └── java
            └── com
                └── liumiaocn
                    └── springbootdemo
                        └── SpringbootdemoApplicationTests.java

12 directories, 5 files
liumiaocn:springboot liumiao$

可以看出,增加了測試相關的程式碼SpringbootdemoApplicationTests.java

SpringbootdemoApplicationTests說明

liumiaocn:springboot liumiao$ cat src/test/java/com/liumiaocn/springbootdemo/SpringbootdemoApplicationTests.java 
package com.liumiaocn.springbootdemo;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootdemoApplicationTests {

	@Test
	public void contextLoads() {
	}

}
liumiaocn:springboot liumiao$
  • COC:根據慣例進行定義測試類的名稱
  • SpringBootTest註解:SpringBootTest是1.4之後引入的一個註解,使得springboot的測試變得更加方便
  • RunWith註解:使用了此註解的情況下,JUnit會呼叫RunWith中所指定的類。不同的框架提供相應的Runner用於測試,比如Junit自己的JUnit4.class,在比如spring的SpringJUnit4ClassRunner或者SpringRunner,都可與之結合使用。
  • Test註解:Junit的常用註解之一,用於定義測試方法,不再贅述。

設定build.gradle

在build.gradle中新增

testImplementation(‘org.springframework.boot:spring-boot-starter-test’)

新增後的build.gradle如下

liumiaocn:springboot liumiao$ cat build.gradle 
buildscript {
	ext {
		springBootVersion = '2.1.1.RELEASE'
	}
	repositories {
		mavenCentral()
	}
	dependencies {
		classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
	}
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'com.liumiaocn'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
	mavenCentral()
}


dependencies {
	implementation('org.springframework.boot:spring-boot-starter-web')
        testImplementation('org.springframework.boot:spring-boot-starter-test')
}
liumiaocn:springboot liumiao$

執行測試

通過使用gradle test可以執行測試並生成測試結果報告

  • 執行日誌
liumiaocn:springboot liumiao$ ls
build           build.gradle    settings.gradle src
liumiaocn:springboot liumiao$ gradle clean
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 3s
1 actionable task: 1 executed
liumiaocn:springboot liumiao$ gradle test

> Task :test
2018-12-12 08:05:49.791  INFO 51042 --- [       Thread-5] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'

BUILD SUCCESSFUL in 5s
4 actionable tasks: 4 executed
liumiaocn:springboot liumiao$

可以看到,gradle test生成了一個reports的目錄,測試執行結果的報告資訊在此目錄中儲存,只通過index.html即可確認結果:

liumiaocn:springboot liumiao$ tree build/reports
build/reports
└── tests
    └── test
        ├── classes
        │   └── com.liumiaocn.springbootdemo.SpringbootdemoApplicationTests.html
        ├── css
        │   ├── base-style.css
        │   └── style.css
        ├── index.html
        ├── js
        │   └── report.js
        └── packages
            └── com.liumiaocn.springbootdemo.html

6 directories, 6 files
liumiaocn:springboot liumiao$

結果確認

確認gradle test執行所產生的結果,可以通過index.html作為入口進行確認:
在這裡插入圖片描述
預設以package為單位的測試summary,也可以確認classes為單位的統計資訊
在這裡插入圖片描述
點選確認更加詳細的測試資訊
在這裡插入圖片描述

總結

可以看到結合使用spring boot提供的測試框架,使用gradle進行spring boot的測試,從測試的執行到結果的確認都十分方便,在下篇文章中將會進一步展開對測試覆蓋率的確認進行視覺化的整合。