【自动化测试】--JUnit5

前言

小亭子正在努力的学习编程,接下来将开启软件测试的学习~~

分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~

同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~

目录

前言

Junit5简介

什么是Junit5

JUnit5的主要特性

JUnit5的使用

注解

面试题

参数化

1.单参数:传递的是一种数据类型的参数

结果展示

2.多参数

3.CSV获取参数

4.方法获取参数:

断言

断言相等

断言不相等

断言为空

断言不为空

1.指定执行顺序

2.随机顺序执行

测试套件

1.按照指定class运行

2.指定包

添加依赖


Junit5简介

什么是Junit5

JUnit5官网

JUnit 5https://junit.org/junit5/

JUnit5是一种针对Java的单元测试框架

JUnit5= JUnit Platform + JUnit Jupiter + JUnit Vintag

简单介绍下:
Junit Platform:
用于JVM上启动测试框架的基础服务,提供命令行,IDE和构建工具等方式执行测试的支持;
JUnit Jupiter:
包含JUnit新的编程模型和扩展模型,主要就是用于编写测试代码和扩展代码;
JUnit Vintage:
用于在JUnit5中兼容运行JUnit3.x和JUnit4.x的测试用例。


JUnit5的主要特性

  • 提供全新的断言和测试注解,支持测试类内嵌;
  • •更丰富的测试方式:支持动态测试,重复测试,参数化测试等;
  • •实现了模块化,让测试执行和测试发现等不同模块解耦,减少依赖;
  • •提供对 Java 8 +版本的支持,如 Lambda 表达式,Stream API等。

JUnit5的使用

注解

这里介绍几种常用的注解

注解 作用
@Test  表示当前的方法是一个测试用例
@Disable 忽略当前测试用例(ignore效果一样,但是不是junit5的)
@BeforeALL 所有的测试用例之前执行
@AfterALL 所有的测试用例执行完之后执行
@BeforeEach  每个测试用例前执行一次
@AfterEach  每个测试用例执行之后执行一次

代码演示

public class JunitTest01 {
    @Test
    void test01(){
        System.out.println("test01");
    }
    //忽略这个测试用例
@Disabled
    @Test
    void test02(){
        System.out.println("test02");
    }
    @Test
    void test03(){
        System.out.println("test03");
    }
    //在所有测试用例前执行
    @BeforeAll
    static void before(){
        System.out.println("beforeall");
    }
    //在所有测试用例之后执行
    @AfterAll
    static void  afterall(){
        System.out.println("afterall");
    }
    //在每一个测试用例前执行
    @BeforeEach
     void beforeeach(){
        System.out.println("beforeeach");
    }
    //在每一个测试用例之后执行
    @AfterEach
  void aftereach(){
        System.out.println("aftereach");
    }

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

执行效果展示

【自动化测试】--JUnit5_第1张图片

面试题

BeforeEach 和 AfterEach

BeforeEach:表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之前执行;类似于Junit4的@Before 。即在每个单元测试之前执行,如果测试类有n个测试方法,则被执行n次;

AfterEach:

表示方法应该在当前类中每个 @Test, @RepeatedTest, @ParameterizedTest 或 @TestFactory 方法之后执行;类似于Junit4的@After 。即在每个单元测试之后执行,如果测试类有n个测试方法,则被执行n次;


参数化

@ParameterizedTest

表示方法是参数化测试,这里我们需要引入对应的依赖,这里和Junit的版本保持一致:



    org.junit.jupiter
    junit-jupiter-params
    5.9.1
    test

1.单参数:传递的是一种数据类型的参数

 @ValueSource

代码实现

//单参数
@ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void Test04(int num){
    System.out.println(num);
}
    @ParameterizedTest
    @ValueSource(strings = {"1","2","3"})
    void Test042(String number){
        System.out.println(number);
    }

结果展示

【自动化测试】--JUnit5_第2张图片

2.多参数

 @CsvSource

代码实现

//多参数
    @ParameterizedTest
    @CsvSource({"1,2,3,''"})
    void Test02(String x,String y,String z,String q){
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
        System.out.println(q);
    }

结果展示

【自动化测试】--JUnit5_第3张图片

 注:这里最后一个参数我展示了字符为空的情况

3.CSV获取参数

  @CsvFileSource

需要创建.CSV文件【这里可能会出现编码错误,出现乱码,可以根据情况去修改idea或文本的编码设置】

创建方法 

【自动化测试】--JUnit5_第4张图片

 【自动化测试】--JUnit5_第5张图片

代码实现

  @ParameterizedTest
    @CsvFileSource(resources = "test0301.csv")
    void Test03(int num ,String name){
        System.out.println("学号"+ num + "姓名:");
        System.out.println(name);

结果展示

【自动化测试】--JUnit5_第6张图片

4.方法获取参数:

@MethodSource

代码实现

//用方法获取参数
    @ParameterizedTest
    @MethodSource("Generator")
    void Test07(int num,String name){
        System.out.println(num+":" + name);

    }

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

结果展示

【自动化测试】--JUnit5_第7张图片


断言

断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;

  • 1)assertEquals :判断两个对象或两个原始类型是否相等
  • 断言(assertions)是测试方法中的核心部分,用来对测试需要满足的条件进行验证。这些断言方法都是 orgjuiit.jupiter.api.Assertions的静态方法。JUnit5内置的断言可以分成如下几个类别:检查业务逻辑返回的数据是否合理;
  • 2)assertNotEquals:判断两个对象或两个原始类型是否不相等
  • 3)assertSame:判断两个对象引用是否指向同一个对象
  • 4)assertNotNull:判断给定的对象引用是否不为null

断言相等

 代码实现

@ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num){
    System.out.println(num);
    Assertions.assertEquals(1,num);
}

结果展示

【自动化测试】--JUnit5_第8张图片

【自动化测试】--JUnit5_第9张图片

断言不相等

代码实现

//断言不相等
@ParameterizedTest
@ValueSource(ints = {1})
void Test02(int num){
    System.out.println(num);
    Assertions.assertNotEquals(2,num);
}

结果展示

【自动化测试】--JUnit5_第10张图片

断言为空

代码实现

//断言为空
@ParameterizedTest
@ValueSource(ints = {1})
void Test03(int num){
    String str = null;
    System.out.println(num);
    Assertions.assertNull(str);
}

结果展示

【自动化测试】--JUnit5_第11张图片

断言不为空

代码实现

//不为空
@ParameterizedTest
@ValueSource(ints = {1})
void Test05(int num){
   String str =" null";
    System.out.println(num);
    Assertions.assertNull(str);
}

结果展示

【自动化测试】--JUnit5_第12张图片

上述测试用例在执行的时候大家会发现不管先写哪个测试用例,最后的执行顺序不变,这是因为juniit有自己默认的执行顺序。那么,我们想指定执行顺序该怎么做呢?


1.指定执行顺序

使用  TestMethodOrder

1.按照指定顺序来执行测试用例    @Order()

【自动化测试】--JUnit5_第13张图片

代码实现

按照指定顺序来执行测试用例

// 按照指定顺序
//@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
// 按照随机顺序
@TestMethodOrder(MethodOrderer.Random.class)
public class Junit_Test1 {
    
    // 第三个执行
    @Order(3)
    @Test
    void Test01() {
        System.out.println("测试用例1");
    }
    // 第一个执行
    @Order(1)
    @Test
    void Test02() {
        System.out.println("测试用例2");
    }
    // 第二个执行
    @Order(2)
    @Test
    void Test03() {
        System.out.println("测试用例3");
    }

效果展示

【自动化测试】--JUnit5_第14张图片

2.随机顺序执行

【自动化测试】--JUnit5_第15张图片


测试套件

1)SelectClasses指定通过class运行测试套件时要选择的类

2)SelectPackages指定通过包运行测试套件时要选择的类

先建不同的包来测试


添加依赖

中央仓库地址:

Maven Repository: Search/Browse/Explore (mvnrepository.com)

添加方法:(以junit的为例演示)

1.进入网站,搜索需要的依赖

【自动化测试】--JUnit5_第16张图片

2.选择版本【自动化测试】--JUnit5_第17张图片

 3.复制路径

【自动化测试】--JUnit5_第18张图片

4.粘贴路径

【自动化测试】--JUnit5_第19张图片

 

以上就是本文分享的主要内容,对你有帮助的话,可以点个赞哦~~

你可能感兴趣的:(junit,单元测试,java)