如何在Maven项目中运行JUnit5测试用例实现

 更新时间:2020年04月28日 10:18:17   作者:老卫  
这篇文章主要介绍了如何在Maven项目中运行JUnit5测试用例实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文演示了如何如何编写JUnit 5测试用例,在Maven项目中运行JUnit 5测试用例。

编写JUnit 5测试用例

如果你是Java开发者,那么对于JUnit应该就不陌生。JUnit是Java单元测试的基础工具。

JUnit目前最新的版本是JUnit 5.x,但广大的Java开发者估计还停留在JUnit 4.x,因此有必要演示下如何编写JUnit 5测试用例。

引入JUnit 5依赖

相比较JUnit 4而言,JUnit 5一个比较大的改变是JUnit 5拥有与JUnit 4不同的全新的API。JUnit 5分成了三部分:

JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
  1. JUnit Platform是在JVM上启动测试框架的基础。 它还定义了TestEngine API,用于开发在平台上运行的测试框架。 此外,该JUnit Platform还提供了一个控制台启动器(用于从命令行启动该平台)和一个基于JUnit 4的运行器,用于在基于JUnit 4的环境中在该平台上运行任何TestEngine。 流行的IDE(IntelliJ IDEA,Eclipse,NetBeans和Visual Studio Code等)和构建工具(Gradle,Maven和Ant等)中也存在对JUnit平台的一流支持。
  2. JUnit Jupiter是新编程模型和扩展模型的组合,用于在JUnit 5中编写测试和扩展。Jupiter子项目提供了一个TestEngine,用于在平台上运行基于Jupiter的测试。
  3. JUnit Vintage提供了一个TestEngine,用于在平台上运行基于JUnit 3和基于JUnit 4的测试。

因此,在Maven中,JUnit 5分模块的,意味着你可以按需引入上面定义的任意模块。这使得引入JUnit 5依赖就有了多个选择。

一般而言,力求省事,就可以通过引入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>

编写测试用例

下面是一段简单的Java程序:

/**
 * Welcome to https://waylau.com
 */
package com.waylau.java.demo;

/**
 * Hello World.
 * 
 * @since 1.0.0 2020年4月12日
 * @author <a href="https://waylau.com" 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;
 }

}

按照管理,我们会在Maven工程的test目录,创建一个与之对应的单元测试用例:

/**
 * 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 href="https://waylau.com" 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());
 }
}

上述用例非常简单,就是想测试下,HelloWorld的getWords方法,是否与预期的一致。

这里需要强调的是JUnit 5和JUnit 4的不同点:

  • JUnit 5使用的API是org.junit.jupiter.api.*包下
  • 测试方法(比如上例testGetWords),可以不加public。

运行JUnit 5测试用例

上如上文所讲,在大多数主流的IDE中,都提供了对JUnit 5的支持。因此可以选择在IDE中运行,也可以通过Maven执行测试。

在IDE中运行

以Eclipse IDE为例,右键类或者方法,选择“Run As -> JUnit Test”即可。如下图所示。

通过Maven执行测试

在Maven中执行测试用例的命令如下:

mvn test

如果你执行了上述命令,会得到下面的测试结果

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.waylau.java.demo.HelloWorldTests
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec

Results :

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] ------------------------------------------------------------------------

上面结果没有失败的用例,但同时你也发现了没有成功的用例。因为根本没有执行测试用例。

这是因为,在Maven中并不能直接识别JUnit 5测试用例。如何解决?此时,还需要额外加多Maven Surefire或Maven Failsafe两个插件。

<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中再次执行测试用例,会得到下面的测试结果:

[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类已经得到了测试执行。

参考引用

Eclipse IDE支持Java 14: https://www.jb51.net/article/185636.htm
本文示例源码:https://github.com/waylau/java-data-structures-and-algorithms-in-action

到此这篇关于如何在Maven项目中运行JUnit5测试用例实现的文章就介绍到这了,更多相关Maven运行JUnit5测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 编译大型Java项目class冲突导致报错的解决方案

    编译大型Java项目class冲突导致报错的解决方案

    这篇文章给大家盘点编译大型项目class冲突导致报错的解决方案,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • Java中的可重入锁ReentrantLock简析

    Java中的可重入锁ReentrantLock简析

    这篇文章主要介绍了Java中的可重入锁ReentrantLock简析,可重入是指同一个线程如果首次获得了这把锁,那么因为它是这把锁的拥有者,因此有权利再次获取这把锁如果是不可重入锁,那么第二次获得锁时,自己也会被锁挡住,需要的朋友可以参考下
    2023-12-12
  • Java @Pointcut注解表达式案例详解

    Java @Pointcut注解表达式案例详解

    这篇文章主要介绍了Java @Pointcut注解表达式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • JAVA基础之继承(inheritance)详解

    JAVA基础之继承(inheritance)详解

    继承(inheritance)是Java OOP中一个非常重要的概念。这篇文章主要介绍了JAVA基础之继承(inheritance),需要的朋友可以参考下
    2017-03-03
  • 浅谈java如何生成分享海报工具类

    浅谈java如何生成分享海报工具类

    这篇文章主要介绍了浅谈java如何生成分享海报工具类,想了解分享海报知识的同学不要错过哦
    2021-04-04
  • 快速掌握SpringBoot应用的启动入口

    快速掌握SpringBoot应用的启动入口

    本篇并不是深究内置服务器的启动过程,而是追溯Springboot启动之前到底做了什么?它是如何与我们经常写的@SpringBootApplication注解注释的main方法类绑定起来的?对SpringBoot启动入口相关知识感兴趣的朋友一起看看吧
    2022-05-05
  • Java 入门图形用户界面设计之事件处理上

    Java 入门图形用户界面设计之事件处理上

    图形界面(简称GUI)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受,本篇精讲Java语言中关于图形用户界面的事件处理
    2022-02-02
  • 使用ShardingJDBC进行数据分片以及读写分离

    使用ShardingJDBC进行数据分片以及读写分离

    ShardingJDBC是一个轻量级的Java框架,提供了数据分片、读写分离、分布式主键生成等数据访问功能,本文将给大家介绍如何使用ShardingJDBC进行数据分片以及读写分离,需要的朋友可以参考下
    2024-01-01
  • 快速排序算法原理及java递归实现

    快速排序算法原理及java递归实现

    快速排序 对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序。使用的是递归原理,在所有同数量级O(n longn) 的排序方法中,其平均性能最好。就平均时间而言,是目前被认为最好的一种内部排序方法
    2014-01-01
  • Springbean的几种注入方式都了解吗

    Springbean的几种注入方式都了解吗

    这篇文章主要介绍了Springbean的几种注入方式都了解吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论