Java Junit单元测试(入门必看篇)

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍单元测试工具Junit使用以及部分理论知识

🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言

什么是Junit单元测试?

JUnit 是一个 Java 编程语言的单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。所谓 xUnit,就是一套基于测试驱动开发的测试框架,它的机制:将程序 预期的结果与程序运行的最终结果进行比对,确保对结果的可预知性。

单元测试是一个对单一实体(类或方法)的测试

为什么要使用Junit单元测试?

在刚刚接触到Junit的时候有一个这样的问题,进行测试的话可以使用main函数,那为什么要使用junit?

总结:有以下几点

  • Junit单元测试可单个多个运行,多个共享数据
  • 有很多注解,可以在之前...之后运行
  • 比main代码少一点
  • 断言测试预期结果

最重要的是规范以及方便,main写完测试完后 都是注释或者直接删掉,而Junit不需要

Junit单元测试的使用:

1、注解:

Junit提供了非常强大的注解功能,通过@Test注解修饰到方法上,该方法就变成了一个测试方法,执行当前类时,会自动的执行该类下所有带@Test注解的用例

在使用这些Junit提供的注解时,需要在pom.xml文件中进行配置:

@Test注解示例:

除了@Test注解外,还有以下常用注解:

  • @AfterEach:当前的方法需要在每个用例执行之后都执行一次
  • @BeforeEach:当前的方法需要在每个用例执行之前都执行一次
  • @AfterAll:当前的方法需要在当前类下所有用例执行之后执行一次,且被该注解修饰的方法必须为静态方法
  • @BeforeAll:当前的方法需要在当前类下所有用例执行之前执行一次,且被该注解修饰的方法必须为静态方法

2、用例的执行顺序

如下图所示,测试用例的执行并不会按照我们编写代码的顺序来执行:

如果在实际测试中,我们需要完成连贯的多个步骤的测试,是需要规定测试用例执行的顺序的,可以通过@order注解来实现排序:

  • 先使用注解说明当前类下所有的用例需要使用@Order注解来进行排序(注意:该注解必须要用在类上)
  • 然后通过@Order来指定用例的具体顺序

调用注解,实现排序效果

调试结果展示:

简单来说:Java中的Order注解是用来控制多个Bean的加载顺序的。

3、测试套件

什么是测试套件?

当我们一个类中有多个测试用例时,我们不可能挨个去运行,那样将会很耗费时间,这时我们就需要测试套件来指定类或者指定包名来运行类下或者包下的所有测试用例。

如果要使用测试套件,首先我们需要先创建一个类,通过@Suite注解标识该类为测试套件类(而不是测试类)

在开始操作前,我们需要对Junit5进行配置suite:

原因:单元测试中有部分是不希望自动执行的,仅有部分单元测试希望在内网http://10.0.0.65/ 服务器上自动运行,因此希望配置suite 以解决部分执行问题。

(junit5 低版本中没有suite,目前我们springboot默认带的junit5 需要升级)

为什么要使用suite?(使用suite的好处)

  • 单元测试可分组管理
  • 进行测试间的编排顺序

suite的使用方法:(在pom中配置suite)

学会配置suite之后,Java中的大部分注解都可以用以下方法进行配置!

1. 在web 应用中引入junit5

复制代码
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
          <version>5.8.2</version>
        <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

2. 引入suite的包

复制代码
<dependency>
  <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-api</artifactId>
      <scope>test</scope>
        </dependency>
        <dependency>
      <groupId>org.junit.platform</groupId>
    <artifactId>junit-platform-suite-engine</artifactId>
</dependency>

3. 代码使用suite

复制代码
package com.wdtrip.wdpromotion;
import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
@SelectClasses({TestCustomPage.class,
TestEbkActivity.class
})
public class TestSuiteOne {
}

4. 在pom文件的build中配置需要执行的suite

复制代码
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        <includes>
      <include>com.wdtrip.wdpromotion.TestSuiteOne</include>
    </includes>
  </configuration>
</plugin>

总结不易,希望uu们不要吝啬亲爱的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

相关推荐
我命由我123451 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
考虑考虑2 小时前
Sentinel安装
java·后端·微服务
凤凰院凶涛QAQ3 小时前
《Java版数据结构 & 集合类剖析》栈与队列:“push/pop 是栈的灵魂,offer/poll 是队列的骨架——四组 API,两种人生”
java·开发语言·数据结构
掘金_答案4 小时前
上线那天,一个 ConcurrentHashMap 差点送走我的 AI 客服——3 天排查 JVM 血泪史
java·后端·架构
猿与禅4 小时前
CosId 分布式 ID 生成器完全教程:从架构原理到生产落地
java·shardingsphere·雪花算法·分布式id·高性能·cosid·号段模式
MindUp4 小时前
企业网盘权限模型解析:多层级访问控制与审计能力选型指南
java·linux·运维
NG4774 小时前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
程序员天天困5 小时前
优雅记录操作日志:从注解到 SpEL 的全链路实践与开源方案对比
java·后端
战血石LoveYY5 小时前
Integer类型超限,导致数据异常
java·算法
乐观的Terry7 小时前
1、为什么要自己造发布系统
java·spring boot·后端·spring cloud·架构