JUnit5 【最实用最简洁】

JUnit5

文章目录

安装依赖:在Maven库中安装

为什么学了 Selenium 还要学 JUnit?

1、JUnit5 是单元测试框架,拿着一个技术写自动化测试用例(Selenium3)

2、Selenium 是自动化测试框架,拿着一个技术管理已经编写好的测试用例(JUnit5)

一、JUnit 的相关技术

JUnit 是针对 java 的一个单元测试框架。

主要核心学习的"注解":

  1. @ Test:表示当前的这个方法是一个测试用例
  2. @ Disabled :把测试用例进行忽略
  3. @ BeforeAll,@ AfterAll:最开始执行,和最后执行;在所有测试用例运行之前跑对应的方法,在所有测试用例之后跑对应的方法(类似于打开浏览器,关闭浏览器)
  4. @ BeforeEach,@ AfterEach:在每一个测试用例之前跑对应的方法,在每一个测试用例之后跑对应的方法

@Test 注解这里的方法需要注意的是需要用 public,如果写出其他会报错

java 复制代码
public class JunitTest {
    @Test
    public void Test01() {
        System.out.println("这是一个测试用例");
    }
}

@ Disabled

其他注解类似,不再赘述

注意:在这些注释中需要导入的是同一个包,如果导入的包不正确也会报错,这是容易出错的地方,而且出来问题,程序也是不会提示错误的。

二、参数化

首先导入依赖:

参数化分为:

1、单独参数

java 复制代码
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void Test04(int num) {
System.out.println(num);
}

2、CSV获取参数(需要创建csv文件在 Resource 目录下)

java 复制代码
@ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test05(String name) {
        System.out.println(name);
    }

3、方法获取参数

java 复制代码
	@ParameterizedTest
    @MethodSource("Generator")
    void Test07(int num, String name) {
        System.out.println(num + ":" + name);
    }

    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(
                1, "张三",
                2, "李四"
        ));
    }

4、多参数

这里面 @CsvSource 里面的参数是不确定什么类型的,只有下面方法传参的时候才能确定类型

java 复制代码
	@ParameterizedTest
    @CsvSource({"1,2,3,''"}) // 需要在方法里面传递类型参数,才能确定死什么类型
    void Test08(String x,int y,String z,String q) {
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
        System.out.println(q);
    }

注意:传 空 字符串的时候,只能用 String 类型。

再次强调,里面的依赖需要导入正确,如果发现语法都没有问题报错,就可以是依赖导入的不对,可以检查一下依赖是否导入正确

三、给测试用例指定顺序

这里需要用的的注解是 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) ,然后再 @Test 方法加上 @Order(执行顺序)

java 复制代码
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest02 {
    @Order(3)
    @Test
    public void A() {
        System.out.println("这是测试用例A");
    }
    @Order(1)
    @Test
    public void B() {
        System.out.println("这是测试用例B");
    }
    @Order(2)
    @Test
    public void C() {
        System.out.println("这是测试用例C");
    }
}

另外还有个注解 @TestMethodOrder(MethodOrderer.Random.class) 这是随机注解,随机指定顺序的,与@Order()里面参数指定的顺序没有任何关系。

四、断言

  • 断言相等
  • 断言不相等
  • 断言为空
  • 断言不为空
java 复制代码
// 断言不相等
Assertions.assertNotEquals(1,num);

//断言相等
Assertions.assertEquals(1,num); // (预期结果,实际结果)

// 断言为null
String str = null;
Assertions.assertNull(str);

// 断言不为null
String str = "null1";
Assertions.assertNull(str);

其他方法也是类似,利用 Assertions类找到对应的方法。

五、测试套件

核心注解:

1、 @Suite (使用套件必须加这个);

2、@SelectClasses();

3、@SelectPackages()

java 复制代码
//@SelectClasses({JunitTest.class,JunitTest03.class,JunitTest02.class}) // 通过class测试用例运行
@Suite
@SelectPackages({"JunitPackage02","JunitPackage01"}) // 通过包选择
public class RunSuite {
}

使用方法 @Suite && @Select...

注意:指定包添加套件的前提

1、所有类文件的命名都要以 Test、Tests 结尾;

2、所有的测试单元都要使用 @Test 注解

提醒:特别注意依赖的导入,肯能出现报错的地方是因为导入的依赖不对

相关推荐
benbenAItalk3 小时前
数字人口播视频的批量生产实践:素材规范、任务编排与质量验收
java·前端·音视频
sunshine22 girl3 小时前
Java学习二 基本语法2, 算术运算符
java·学习
niucloud-admin4 小时前
JAVA V6 多商户商城 开发文档——插件目录结构
java·开发语言
2601_962885724 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
滕州市燕猫虎计算机科技工作室个体工商户4 小时前
Java锁
java·开发语言
shehuiyuelaiyuehao6 小时前
1计算机是如何工作的
java·计算机网络
letisgo56 小时前
JAVA 高级进阶07篇《@Transactional失效的8个场景:代理机制到传播行为》
java·面试·transactional·spring事务·aop动态代理
水域安全老周6 小时前
水趣钓鱼救生衣专利拆解:两级锁紧如何解决落水人衣分离
java·前端·网络
三8447 小时前
Java 模板注入(FreeMarker) · 02 · 模板引擎与 FreeMarker 语法
java·开发语言·web安全·freemarker
暮雨哀尘7 小时前
Java 基础练习(一):创建类并调用对象
java·开发语言