如何在Maven項(xiàng)目中運(yùn)行JUnit5測(cè)試用例實(shí)現(xiàn)
本文演示了如何如何編寫(xiě)JUnit 5測(cè)試用例,在Maven項(xiàng)目中運(yùn)行JUnit 5測(cè)試用例。
編寫(xiě)JUnit 5測(cè)試用例
如果你是Java開(kāi)發(fā)者,那么對(duì)于JUnit應(yīng)該就不陌生。JUnit是Java單元測(cè)試的基礎(chǔ)工具。
JUnit目前最新的版本是JUnit 5.x,但廣大的Java開(kāi)發(fā)者估計(jì)還停留在JUnit 4.x,因此有必要演示下如何編寫(xiě)JUnit 5測(cè)試用例。
引入JUnit 5依賴
相比較JUnit 4而言,JUnit 5一個(gè)比較大的改變是JUnit 5擁有與JUnit 4不同的全新的API。JUnit 5分成了三部分:
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
- JUnit Platform是在JVM上啟動(dòng)測(cè)試框架的基礎(chǔ)。 它還定義了TestEngine API,用于開(kāi)發(fā)在平臺(tái)上運(yùn)行的測(cè)試框架。 此外,該JUnit Platform還提供了一個(gè)控制臺(tái)啟動(dòng)器(用于從命令行啟動(dòng)該平臺(tái))和一個(gè)基于JUnit 4的運(yùn)行器,用于在基于JUnit 4的環(huán)境中在該平臺(tái)上運(yùn)行任何TestEngine。 流行的IDE(IntelliJ IDEA,Eclipse,NetBeans和Visual Studio Code等)和構(gòu)建工具(Gradle,Maven和Ant等)中也存在對(duì)JUnit平臺(tái)的一流支持。
- JUnit Jupiter是新編程模型和擴(kuò)展模型的組合,用于在JUnit 5中編寫(xiě)測(cè)試和擴(kuò)展。Jupiter子項(xiàng)目提供了一個(gè)TestEngine,用于在平臺(tái)上運(yùn)行基于Jupiter的測(cè)試。
- JUnit Vintage提供了一個(gè)TestEngine,用于在平臺(tái)上運(yùn)行基于JUnit 3和基于JUnit 4的測(cè)試。
因此,在Maven中,JUnit 5分模塊的,意味著你可以按需引入上面定義的任意模塊。這使得引入JUnit 5依賴就有了多個(gè)選擇。
一般而言,力求省事,就可以通過(guò)引入junit-jupiter依賴。junit-jupiter就是常用JUnit 5模塊的聚合包。
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
編寫(xiě)測(cè)試用例
下面是一段簡(jiǎn)單的Java程序:
/**
* Welcome to https://waylau.com
*/
package com.waylau.java.demo;
/**
* Hello World.
*
* @since 1.0.0 2020年4月12日
* @author <a rel="external nofollow" rel="external nofollow" >Way Lau</a>
*/
public class HelloWorld {
private String words;
public HelloWorld(String words) {
this.words = words;
}
public String getWords() {
return words;
}
}
按照管理,我們會(huì)在Maven工程的test目錄,創(chuàng)建一個(gè)與之對(duì)應(yīng)的單元測(cè)試用例:
/**
* Welcome to https://waylau.com
*/
package com.waylau.java.demo;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* HelloWorld Test.
*
* @since 1.0.0 2020年4月12日
* @author <a rel="external nofollow" rel="external nofollow" >Way Lau</a>
*/
class HelloWorldTests {
@Test
void testGetWords() {
var words = "Hello World";
var hello = new HelloWorld(words);
assertEquals(words, hello.getWords());
}
}
上述用例非常簡(jiǎn)單,就是想測(cè)試下,HelloWorld的getWords方法,是否與預(yù)期的一致。
這里需要強(qiáng)調(diào)的是JUnit 5和JUnit 4的不同點(diǎn):
- JUnit 5使用的API是org.junit.jupiter.api.*包下
- 測(cè)試方法(比如上例testGetWords),可以不加public。
運(yùn)行JUnit 5測(cè)試用例
上如上文所講,在大多數(shù)主流的IDE中,都提供了對(duì)JUnit 5的支持。因此可以選擇在IDE中運(yùn)行,也可以通過(guò)Maven執(zhí)行測(cè)試。
在IDE中運(yùn)行
以Eclipse IDE為例,右鍵類或者方法,選擇“Run As -> JUnit Test”即可。如下圖所示。

通過(guò)Maven執(zhí)行測(cè)試
在Maven中執(zhí)行測(cè)試用例的命令如下:
mvn test
如果你執(zhí)行了上述命令,會(huì)得到下面的測(cè)試結(jié)果
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.waylau.java.demo.HelloWorldTests
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 secResults :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.983 s
[INFO] Finished at: 2020-04-12T11:22:16+08:00
[INFO] ------------------------------------------------------------------------
上面結(jié)果沒(méi)有失敗的用例,但同時(shí)你也發(fā)現(xiàn)了沒(méi)有成功的用例。因?yàn)楦緵](méi)有執(zhí)行測(cè)試用例。
這是因?yàn)?,在Maven中并不能直接識(shí)別JUnit 5測(cè)試用例。如何解決?此時(shí),還需要額外加多Maven Surefire或Maven Failsafe兩個(gè)插件。
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>${maven-failsafe-plugin.version}</version>
</plugin>
</plugins>
</build>
在Maven中再次執(zhí)行測(cè)試用例,會(huì)得到下面的測(cè)試結(jié)果:
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.waylau.java.demo.HelloWorldTests
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.045 s - in com.waylau.java.demo.HelloWorldTests
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.116 s
[INFO] Finished at: 2020-04-12T11:30:29+08:00
[INFO] ------------------------------------------------------------------------
可以看到,HelloWorldTests類已經(jīng)得到了測(cè)試執(zhí)行。
參考引用
Eclipse IDE支持Java 14: http://www.dhdzp.com/article/185636.htm
本文示例源碼:https://github.com/waylau/java-data-structures-and-algorithms-in-action
到此這篇關(guān)于如何在Maven項(xiàng)目中運(yùn)行JUnit5測(cè)試用例實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Maven運(yùn)行JUnit5測(cè)試內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中Timer的schedule()方法參數(shù)詳解
今天小編就為大家分享一篇關(guān)于Java中Timer的schedule()方法參數(shù)詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼【java版】
這篇文章主要介紹了微信公眾號(hào)開(kāi)發(fā)之設(shè)置自定義菜單實(shí)例代碼,本實(shí)例是為了實(shí)現(xiàn)在管理后臺(tái)實(shí)現(xiàn)微信菜單的添加刪除管理。需要的朋友可以參考下2018-06-06
Mybatis-plus使用TableNameHandler分表詳解(附完整示例源碼)
這篇文章主要介紹了Mybatis-plus使用TableNameHandler分表詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Java16 JDK安裝并設(shè)置環(huán)境變量的方法步驟
突然想起自己大學(xué)剛接觸java的時(shí)候,要下載JDK和配置環(huán)境變量,那時(shí)候我上網(wǎng)找了很多教學(xué),本文就詳細(xì)的介紹一下Java16 JDK安裝并設(shè)置環(huán)境變量,感興趣的可以了解一下2021-09-09
alibaba?seata服務(wù)端具體實(shí)現(xiàn)
seata是來(lái)處理分布式服務(wù)之間互相調(diào)用的事務(wù)問(wèn)題,本文重點(diǎn)給大家介紹alibaba-seata實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
IDEA導(dǎo)入geoserver項(xiàng)目的詳細(xì)步驟及注意事項(xiàng)
由于GeoServer是基于Java開(kāi)發(fā)的。因此在安裝之前,必須確保安裝了Java。本文給大家分享IDEA導(dǎo)入geoserver項(xiàng)目的詳細(xì)步驟及注意事項(xiàng),感興趣的朋友一起看看吧2021-06-06
Java設(shè)計(jì)模式之命令模式CommandPattern詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之命令模式CommandPattern詳解,命令模式是把一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而使你可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化;對(duì)請(qǐng)求排隊(duì)或記錄請(qǐng)求日志,以及支持可撤銷的操作,需要的朋友可以參考下2023-10-10

