JUnit单元测试

文章目录

  • 1. JUnit简介
  • 2. 注解
  • 3. 断言
  • 4. 测试用例的执行顺序
  • 5. 参数化
  • 6. 动态参数方法
  • 7. 测试套件

在这里插入图片描述

1. JUnit简介

JUnit是一个流行的Java单元测试框架,用于编写和执行自动化单元测试。它为开发人员提供了一套功能丰富的API,用于编写可靠和可重复执行的测试用例。

2. 注解

注解 说明
@Test 该注解用于标记测试方法,表示该方法是一个测试用例。JUnit将执行所有被标记的方法,并验证其预期结果。
@BeforeEach 该注解表明此方法需要在当前类下每个用例执行之前都会执行一次
@BeforeAll 该注解表明此方法需要在当前类下每个用例执行之前执行一次,并且必须是被static修饰的方法
@AfterEach 该注解表明此方法需要在当前类下每个用例执行之后都会执行一次
@AfterAll 该注解表明此方法需要在当前类下每个用例执行之后只执行一次,并且必须是被static修饰的方法
@Disabled 用于标注一个测试方法或测试类,表示禁用该测试方法或整个测试类。不会执行该测试方法或测试类。
@DisplayName 用于为测试方法或测试类指定一个可读性更好的名称,作为测试报告中的显示名称。
@Nested 用于标注一个内部测试类,表示这是一个嵌套测试类。嵌套测试类可以帮助组织测试代码,使其更加清晰和模块化。
@RepeatedTest 用于标注一个测试方法,指定该测试方法需要重复执行多次。
@ParameterizedTest 用于标注一个测试方法,指定该测试方法需要使用参数化测试。可以通过提供不同的参数组合来执行多次测试。
@Timeout 用于标注一个测试方法,指定该测试方法的运行时间上限。如果方法的执行时间超过指定的时间,测试将被认为是失败。

3. 断言

在JUnit中,断言是用于验证测试结果的一种机制。JUnit提供了多种断言方式,可以用于比较预期值和实际值,判断测试是否通过。

常用的几种断言方式:

  1. assertEquals(expected, actual):用于比较两个值是否相等。如果不相等,测试将失败。
  2. assertNotEquals(expected, actual): 用于比较两个值是否不相等。如果不相等,测试将失败。
  3. assertTrue(condition):用于检查给定的条件是否为真。如果条件为假,测试将失败。
  4. assertFalse(condition):用于检查给定的条件是否为假。如果条件为真,测试将失败。
  5. assertNull(object):用于检查给定的对象是否为null。如果对象不为null,测试将失败。
  6. assertNotNull(object):用于检查给定的对象是否不为null。如果对象为null,测试将失败。
  7. assertSame(expected, actual):用于检查两个对象是否引用同一个对象。如果不是同一个对象,测试将失败。
  8. assertNotSame(expected, actual):用于检查两个对象是否引用不同的对象。如果引用同一个对象,测试将失败。

4. 测试用例的执行顺序

在JUnit中,测试用例的执行顺序是不确定的。这是因为JUnit设计为执行每个测试用例时都要创建一个新的测试实例,并且每个测试实例之间是相互独立的。因此,JUnit执行测试用例时通常会以随机的顺序执行。

但有时我们又想要测试用例按照我们的想法顺序执行. 这个时候我们就可以@TestMethodOrder(MethodOrderer.OrderAnnotation.class)和@Order()注解来实现

5. 参数化

参数化测试是一种在JUnit中运行相同测试逻辑,但使用不同输入值的方法。它允许我们使用不同的测试数据对相同的测试用例进行多次执行,以验证程序在不同输入情况下的行为和结果。

在JUnit中,有几种方式可以实现参数化测试:

  1. JUnit 4中可以使用@Parameters注解和静态方法来实现参数化测试。通过在测试类中定义一个返回测试数据的静态方法,并在该方法上标注@Parameters注解,就可以将该方法的返回值作为参数传递给测试方法。
  2. JUnit 5中引入了更加灵活和强大的参数化测试功能。可以使用@ParameterizedTest注解来标记一个需要进行参数化的测试方法,并可以使用@ValueSource、@CsvSource、@MethodSource等注解来提供测试数据。
    • @ValueSource注解用于提供一个原始数据的集合,例如字符串数组、整数数组等。
    • @CsvSource注解用于提供一个包含多个值的CSV字符串,用于表示多个参数组合。如果是csv文件,可以和@CsvFileScource搭配使用,(files = “文件路径”)
    • @MethodSource注解用于提供一个指定方法的名称,该方法返回测试数据的源。 如果返回值类型是统一的,直接写具体的类型即可. 如果要返回的类型不统一,就需要使用Arguments

注意: 使用参数化注解之后,不能使用@Test注解

6. 动态参数方法

@MethodSource(方法名)

动态参数化测试允许在运行时生成测试用例,从而使测试方法能够接收不同的参数。

使用@MethodSource注解需要满足以下条件:

  1. 被注解的方法必须是静态方法。
  2. 被注解的方法必须返回一个流(Stream)、迭代器(Iterator)、迭代式(Iterable)或数组(Array)等可迭代的对象。

7. 测试套件

使用@Suite注解来创建测试套件,并搭配@SelectClasses或@SelectPackages 来使用

@SelectClasses 需要当前类中所有的用例都要能被运行(@Test和参数化用例)

@SelectPackages 需要包中的类名以Test/Tests结尾

JUnit单元测试_第1张图片

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