JUnit 5单元测试(一)

news/2024/5/19 3:43:50 标签: junit, 单元测试, java, JUnit5, maven

目录

  • 一、JUnit 4与JUnit 5区别
  • 二、新建一个maven项目
  • 三、pom文件配置
    • 1.引入junit5依赖
    • 2.引入 maven-surefire-plugin插件
    • 3.最终的pom.xml
    • 4.扩展

一、JUnit 4与JUnit 5区别

JUnit 5 旨在适应Java 8 编码风格,并比 JUnit 4 更健壮和灵活。

JUnit4 需要Java5 或以上版本。

使用 JUnit5 需要 Java 8 或更高版本。

此外主要的区别是断言Assert和其他注解以及使用上的不同,具体不同点可以参考 JUnit4和JUnit5的主要区别

maven_11">二、新建一个maven项目

先按照这篇文章使用idea的maven模板创建一个maven项目:idea快速创建maven项目

三、pom文件配置

junit5_18">1.引入junit5依赖

  <dependencies>
    <!-- junit5用于单元测试-->
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.9.2</version>
      <scope>test</scope>
    </dependency>
    <!-- assertj-core用于单元测试中使用assertThat断言,若不使用assertThat断言,可删除下面的依赖-->
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>3.24.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

上面使用的junit-jupiter依赖是Junit 提供的一个 集合器(aggregator):它 集成了其他需要的 Junit 依赖,包括:

这样你就只需写集合器那一个依赖就可以了。

mavensurefireplugin_48">2.引入 maven-surefire-plugin插件

引入 maven-surefire-plugin 插件以支持 Maven 执行应用程序的单元测试并生成txt或xml格式的报告。
(默认情况下,报告生成在{项目目录}/target/surefire-reports/TEST-*.xml)。

        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>

3.最终的pom.xml

因为用的idea的maven模板创建的maven项目,其最终生成的pom.xml中 pluginManagement里的插件版本可能有点旧,你可以自己指定插件版本,也可以把用不到的插件删除。

最终你的pom.xml看起来像下面这样:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>mavenTest</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>mavenTest</name>

  <!-- 指定项目编译使用的jdk版本-->
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <!-- junit5用于单元测试-->
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.9.2</version>
      <scope>test</scope>
    </dependency>
    <!-- 用于单元测试中使用assertThat断言-->
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <version>3.24.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
        <!-- clean 清除构建在target文件夹下生成的各个Jar包和class等文件-->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.2.0</version>
        </plugin>

        <!-- 用于编译项目的源代码 -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.11.0</version>
          <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
          </configuration>
        </plugin>

        <!-- 支持单元测试 -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>3.0.0</version>
        </plugin>

        <!-- 用于将项目打包成一个jar -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.3.0</version>
        </plugin>

        <!-- 将项目生成的jar包添加到本地存储库,方便其他项目引用。(其他项目通过groupId、artifactId、version来引用本项目的jar) -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-install-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

4.扩展

生命周期、生命周期阶段、插件和插件目标是 Maven 的核心。

  • Maven 命令mvn只接受生命周期阶段或插件目标作为参数。
  • Maven 带有三个生命周期:default、clean 和 site。
  • 每个生命周期由生命周期阶段组成,总共有 28 个阶段——默认 生命周期包含21 个阶段验证、…、编译、…、打包、…、安装、部署),清理的生命周期含有3个阶段预编译)清洁、清洁、清洁后),站点生命周期含有 4 个站点前、站点、站点后、站点部署)。
  • 当使用命令调用生命周期阶段时mvn,所有前面的阶段都会依次执行。
  • 生命周期阶段本身不具备完成任何任务的能力,它们依赖于插件来执行任务。
  • 根据项目和打包类型,Maven 将各种插件目标绑定到生命周期阶段,目标执行委托给它们的任务。

IDEA 主界面右侧 Maven页签的 Lifecycle 和 Plugins 里有同样的命令,比如 install,既在 Plugins 中存在,也在 Lifecycle中存在,它们有什么区别吗?

简单来说Lifecycle 下的是执行整个生命周期,而Plugins 下的是只执行它具体的阶段。

举个例子:

你点击Lifecycle 下的 install :

它会帮你执行如下过程 validate --> compile --> test --> package --> integration-test --> verify --> install ,也就是说它会帮你执行验证、编译、单元测试、打包、整合测试、最后再把生成的jar包发布到本地仓库,换句话说它会帮你执行 install 之前的所有操作,最后执行 install

你点击 Plugins 下的 install :

它只会帮你把生成的jar包发布到本地仓库,也就是说它只会帮你执行 install ,其前面的操作它不会帮你执行。

感兴趣的话可以看下这篇文章:IDEA 中 maven 的 Lifecycle 和Plugins 的区别


http://www.niftyadmin.cn/n/156611.html

相关文章

系统应用问题排查好用的命令

一、问题排查思路系统页面出现卡顿、无响应&#xff0c;大致问题排查思路首先检查网络问题。通过常用的ping或telnet命令进行检查检查系统日志&#xff1a;前台通过F12进入调试&#xff0c;后台检查应用日志检查系统应用资源使用情况&#xff0c;包括CPU、内存、IO、磁盘等二、…

Python3分析个人音乐收藏

导语偶遇了一篇文章&#xff1a;“Mapping Your Music Collection”https://www.christianpeccei.com/musicmap/感觉颇有缘分&#xff0c;似有命中注定之感&#xff0c;于是想着用一些简单的音频处理、机器学习和可视化技术&#xff0c;简单地分析一下自己的音乐收藏。当然我对…

解析 截取xml文件分割成n个文件

public static void main(String[] args) {try {int batchSize 1000; //每个文件包含的元素数量File inputFile new File("D:\\Users\\yl.jiao.CN1\\Desktop\\费用中心\\CostCent_Headcount - 副本.xml"); //输入文件DocumentBuilderFactory dbFactory DocumentBu…

93. 复原 IP 地址 Python

文章目录一、题目描述示例 1示例 2示例 3二、代码三、解题思路一、题目描述 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 . 分隔。 例如&#xff1a;"0.1.2.201" 和 &…

23.3.16总结

简单搜索&&进阶搜索 - Virtual Judge (vjudge.net) D - Shufflem Up 编织字符串的操作将s1和s2拼接起来&#xff08;注意这里s2先拼接&#xff0c;具体请看样例&#xff09;&#xff0c;得到长度为len*2的字符串s。 假设有s1"JNU",s2"ACM",s&qu…

九龙证券|黄金新股9连板,“一带一路”掀涨停潮!7股封单超亿元

今日两市共37只涨停股&#xff0c;首要集中于“一带一路”概念中细分的水泥建材、工程建设板块。除掉8只ST股&#xff0c;合计29股涨停。另外&#xff0c;11股封板未遂&#xff0c;全体封板率为71%。 涨停战场&#xff1a;四川黄金9连板 从收盘涨停板封单量来看&#xff0c;四…

死磕VR,爱奇艺的元宇宙大局观

作者 | 楚纹龙 来源 | 洞见新研社 “人口红利消失&#xff0c;市场跑马圈地的时代结束了&#xff0c;接下来的增长需要在每一个缝隙里收割。”这是爱奇艺创始人兼CEO龚宇曾在多个场合提到的。 爱奇艺去年能够扭亏为盈&#xff0c;首次实现全年盈利&#xff0c;也确实是在会员…

都说软件测试岗位是个人都会,但为啥每年那么多劝退的?

上一个说软件测试简单的&#xff0c;已经被面试官问emo了... 现在已经过了 ”不会但我会学“ 就能感动面试官的时代&#xff0c;随着供需关系的变化&#xff0c;不论是对于面试官还是面试者&#xff0c;面试的成本越来越高。为了筛选到更优秀的程序员&#xff0c;面试官们可谓…