首页 > 编程语言 >【Java学习笔记】Maven项目+Junit5单元测试

【Java学习笔记】Maven项目+Junit5单元测试

时间:2023-05-05 09:45:38浏览次数:43  
标签:Java 单元测试 Maven platform 测试 import org junit

1. Maven简介;Maven概念:仓库、坐标

Maven坐标:描述仓库中资源的位置
Maven坐标查找:https://mvnrepository.com/
Maven坐标组成:
- groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.Google)
- artifactId:定义当前Maven项目名称(通常是模块名称)
- version:定义当前Maven项目版本号

2. Maven在windows下的安装与配置

3. 本地仓库配置

在settings.xml文件中的<settings标签中配置本地仓库位置
image
image

4. 镜像仓库配置(中央仓库的镜像)

在settings.xml文件中的<mirrors></mirrors>标签中配置镜像仓库,这里配置阿里云镜像仓库

镜像仓库配置代码
<mirror>
  <!-- 此镜像唯一的标识符,用来区分不同的mirror元素 -->
  <id>aliyunmaven</id>
  <!-- 对哪种仓库进行镜像,简单来说就是替代哪个仓库,这里替代中央仓库 -->
  <mirrorOf>central</mirrorOf>
  <!-- 镜像名称 -->
  <name>aliyun maven</name>
  <!-- 镜像URL -->
  <url>https://maven.aliyun.com/repository/public</url>
</mirror>

image

5. IDEA创建Maven项目

创建一个空项目

image

修改SDK

image
image

Settings中查找maven,配置maven版本号以及配置文件位置

image

创建maven模块

image

创建好之后就是标准的maven项目开发结构目录

不同的文件夹有不同的类型(如果有没有自动创建的文件夹可视情况自行添加)
各目录存放资源类型说明:

  • src/main/java:项目java源码
  • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
  • src/test/java:测试代码
  • src/test/resources:测试相关配置文件
  • src/pom.xml:项目pom文件

image
image

6. Junit5实操

6.1 创建好的Maven工程JunitDemo中之后,在pom.xml中添加Junit5的依赖,可以在https://mvnrepository.com/ 查找相应版本依赖代码
Junit5的依赖
<dependency>
    <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-launcher</artifactId>
    <version>1.9.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.junit.vintage</groupId>
    <artifactId>junit-vintage-engine</artifactId>
    <version>5.9.2</version>
    <scope>test</scope>
</dependency>

image

添加依赖后,右键pom.xml->Maven->Reload project更新External Libraries中的jar包
image
image

6.2 src/test/java下创建测试类Junit5DemoTest
添加用例@Test
在用例执行前后添加@BeforeEach和@AfterEach
在测试类执行前后添加@BeforeAll和@AfterAll
代码
import org.junit.jupiter.api.*;


public class Junit5DemoTest {

    @BeforeAll
    public static void beforeAllTest() {
        System.out.println("我是@BeforeAll,测试类执行前要先执行我\n");
    }

    @BeforeEach
    public void beforeEachTest() {
        System.out.println("我是@BeforeEach,执行用例前先执行我");
    }

    @Test
    void test1() {
        System.out.println("junit5 test1");
    }

    @Test
    void test2() {
        System.out.println("junit5 test2");
    }

    @AfterEach
    public void afterEachTest() {
        System.out.println("我是@AfterEach,执行用例后要执行我\n");
    }

    @AfterAll
    public static void afterAllTest() {
        System.out.println("我是@AfterAll,测试类执行完了要执行我");
    }
}
测试结果1

image

在测试用例test1上加入注解@Disabled,使test1失效

image

测试结果2

image

分别将test1和test2用@DisplayName加上用例展示名称

image

测试结果3

image

对测试用例2加上注解@RepeatedTest,使其额外重复执行3次

image

测试结果4

image

6.3 src/test/java下创建测试类NestedDemoTest(嵌套执行)
代码
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;

public class NestedDemoTest {
    @Test
    @DisplayName("外层测试")
    void outerTest() {
        System.out.println("最外层测试输出");
    }

    @Nested
    @DisplayName("内层测试1")
    class Inner {
        @Test
        void innerTest() {
            System.out.println("内层测试1输出");
        }

        @Nested
        @DisplayName("内层测试1嵌套")
        class InInner {
            @Test
            void InInnerTest() {
                System.out.println("内层测试1嵌套内层输出");
            }
        }
    }

    @Nested
    @DisplayName("内层测试2")
    class Inner2 {
        @Test
        void innerTest2() {
            System.out.println("内层测试2输出");
        }
    }
}
测试结果

image
由测试结果可以看出,@Nested的执行顺序为先执行@Nested嵌套外层的用例,再以倒叙形式执行@Nested用例,然后再执行第二层嵌套的用例:
外层->倒叙嵌套->第二层嵌套

6.4 src/test/java下创建测试类NestedDemoTest(Junit5套件执行)

(1)添加依赖
image

(2)有两个包Junit5Demo, NestedDemo,利用@RunWith+@SelectPackages将包中测试类依次运行
image

RunWithDemoTest.java
package suit;

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages(value = {"Junit5Demo", "NestedDemo"})
public class RunWithDemoTest {

}
测试结果

image

(3)@RunWith+@SelectPackages+@IncludePackages配合使用过滤出需要执行的测试包

RunWithDemoTest.java
package suit;

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.IncludePackages;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages(value = {"Junit5Demo", "NestedDemo"})
@IncludePackages("Junit5Demo.demo")
public class RunWithDemoTest {

}
测试结果

image

(4)@RunWith+@SelectPackages+@ExcludePackages配合使用过滤出不需要执行的测试包

RunWithDemoTest.java
package suit;

import org.junit.platform.runner.JUnitPlatform;
import org.junit.platform.suite.api.ExcludePackages;
import org.junit.platform.suite.api.IncludePackages;
import org.junit.platform.suite.api.SelectPackages;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
@SelectPackages(value = {"Junit5Demo", "NestedDemo"})
//@IncludePackages("Junit5Demo.demo")
@ExcludePackages("Junit5Demo.demo")
public class RunWithDemoTest {

}
测试结果

image

参考资源:
用IDEA创建Maven项目+junit进行测试
如何利用xUnit框架对测试用例进行维护-xUnit简介及基本使用方法(基于Junit4)
Junit5简介、构成、新特性及基本使用-常用注解、套件执行
Junit5

标签:Java,单元测试,Maven,platform,测试,import,org,junit
From: https://www.cnblogs.com/Eve7Xu/p/17353085.html

相关文章

  • 力扣141(Java)-环形链表(简单)
    题目:给你一个链表的头节点head,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。注意:pos不作为参数进行传递 。仅仅是为了标识......
  • Java正则提取中间段文本
    核心正则开始字符串(.*)结束字符串示例Stringa="【权益到账提醒】尊敬的客户,您好!您已获得权益礼包,【兑换码】:11223344。请妥善保管好您的兑换码,一经兑换,立即失效。";Matchermatcher=Pattern.compile("【兑换码】:(.*)。请妥善保管好您的兑换码").matcher(a);if(ma......
  • Java中数字相关的类有哪些?Nuber数字类和Math数学类详解
    前言我们在解决实际问题时,会经常对数字、日期和系统设置进行处理,比如在我们的代码中,经常会遇到一些数字&数学问题、随机数问题、日期问题和系统设置问题等。为了解决这些问题,Java给我们提供了多个处理相关问题的类,比如Number类、Math类、Random类、BigInteger类、BigDecimal类、......
  • Java01:常识
     高可用,高兴能,高并发。   writeoncerunanywhere.简单性,面向对象,可移植性,高性能,分布式,动态性,多线程,安全性,健壮性。java三大版本:JavaSE:标准版(桌面程序,控制台开发)嵌入式版本已经寄了。JavaEE:E企业级开发(web端,服务器开发)JDKJREJVMJDK:JavaDevelop......
  • java网络编程示例
    1.clientimportjava.io.*;importjava.net.InetAddress;importjava.net.Socket;publicclassTcpClientDemo{publicstaticvoidmain(String[]args){InetAddressbyName=null;Socketsocket=null;OutputStreamos=null;......
  • IntelliJ IDEA 2022.3.2 最新专业版 Windows系统下安装, 一直可用,业界公认的最好的jav
    ​第三步: IDEA安装补丁1、补丁下载地址: 下载链接2、补丁安装流程下载并安装IDEA后,先不启动IDEA下载补丁程序并解压并放置任意目录执行脚本install-current-user.vbs​ 双击执行install-current-user.vbs脚本,等待过程大概10-30秒,如看到弹框提示Done......
  • JAVA8新特性
    JAVA8新特性Lambda表达式只有函数式接口才能使用Lambda表达式​ Lambda表达式是JDK8中的一个语法糖,它可以对某些匿名内部类的写法进行简化,它是函数式编程思想的一个重要体现,让我们不用关注是什么对象,而是更关注我们对数据进行了什么操作。核心原则​ 可推导可省略基本格......
  • java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,附源码+
    1、项目介绍java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,实现管理员:首页、个人中心、公告信息管理、院系管理、班级管理、学生管理、宿舍信息管理、宿舍安排管理、卫生检查管理、报修信息管理、报修处理管理、缴费信息管理,学生;首页、个人中心、公......
  • 命令行编译和执行java代码
    虽然现在IDE很强大又很智能,但是平常随意写点练手的代码的时候,直接在命令行中使用vim和java命令更为方便快捷,可以做到无鼠标纯键盘的操作。首先保证将java相关指令添加到了环境变量中;1.编译class文件:javac-d./Test.java编译好的class文件会放置到环境当前目录(./)中。-d......
  • 20基于java的科研管理系统设计与实现
    背景及意义目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方......