天天看点

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

⭐️前言⭐️

本篇文章主要介绍单元测试工具JUnit的使用。

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

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

🍉博客中涉及源码及博主日常练习代码均已上传GitHub

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

📍内容导读📍

  • 🍅1.注解
  • 🍅2.断言
  • 🍅3.用例的执行顺序
  • 🍅4.参数化
  • 🍅5.测试套件

🍅1.注解

JUnit提供了非常强大的注解功能,通过

@Test

注解修饰到方法上,该方法就变为了一个测试方法,执行当前类时,会自动的执行该类下所有带

@Test

注解的用例。

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

<dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>5.8.2</version>
            <scope>test</scope>
        </dependency>
           

@Test

示例:

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

除了

@Test

注解外,还有以下常用注解:

  • @BeforeEach

    :当前的方法需要在每个用例执行之前都执行一次
  • @BeforeAll

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

    :当前的方法需要在每个用例执行之后都执行一次
  • @AfterAll

    :当前的方法需要在当前类下所有用例执行之后执行一次,且被该注解修饰的方法必须为静态方法

🍅2.断言

检查测试方法的期望结果值和真实返回值,通过

Assertions

类实现。

  • 断言匹配/不匹配:

    assertEquals()

    assertNotEquals()

  • 断言结果为真/为假:

    assertTrue()

    assertFalse()

  • 断言结果为空/非空:

    assertNull()

    assertNotNull()

@Test
    void a() {
        Assertions.assertTrue(1==1);
    }
           

🍅3.用例的执行顺序

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

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

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

@order

注解来实现排序:

  • 先使用注解说明当前类下所有的用例需要使用

    @Order

    注解来进行排序(注意:该注解必须要用在类上)
  • 然后通过

    @Order

    来指定用例的具体顺序
    单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

🍅4.参数化

参数化就是尽可能的通过一个用例,多组参数来模拟用户的行为

在使用参数化注解之前需要先用

@ParameterizedTest

声明该方法为参数化方法,然后再通过注解提供数据来源。

单参数:

@ValueSource

(数据类型方法={参数1,参数2…})

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

多参数:

1.从注解中手动编写数据源

@CsvSource

({“数据组合1”,“数据组合2”…}),每个双引号是一组参数(测试用例)

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

2.从第三方csv文件读取数据源

如果测试用例较多时,在注解处手动编写数据源就有些不方便,我们这时就可以借助第三方csv文件来读取数据源

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件
单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

动态参数:

// 通过动态方法来提供数据源
    @ParameterizedTest
    @MethodSource("methodParams")
    void dynamicParamsTest(String name,int age) {
        System.out.println("name:"+name+",age:"+age);
    }

    static Stream<Arguments> methodParams() throws InterruptedException {
        // 构造动态参数
        String[] arr=new String[4];
        for (int i=0;i< arr.length;i++) {
            Thread.sleep(500);
            arr[i]=System.currentTimeMillis()+"";
        }
        return Stream.of(
                Arguments.arguments(arr[0],20),
                Arguments.arguments(arr[1],19),
                Arguments.arguments(arr[2],18),
                Arguments.arguments(arr[3],17)
        );
    }
           
单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

注意:当我们不指定数据源方法名时,会自动的找跟用例方法名同名的静态方法

🍅5.测试套件

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

如果要使用测试套件,首先我们需要先创建一个类,通过

@Suite

注解标识该类为测试套件类(而不是测试类)

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

然后指定类或者包来运行其下的所有测试用例

指定类来运行用例:

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

指定包名来运行包下所有的用例:

如果使用包名来指定运行的范围,那么该包下的测试类的命名需要以

Test/Tests

结尾(T必须大写)

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件

⭐️最后的话⭐️

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

单元测试工具——JUnit的使用🍅1.注解🍅2.断言🍅3.用例的执行顺序🍅4.参数化🍅5.测试套件