霍格沃兹测试开发

JUnit5 参数化用例(一)

霍格沃兹测试开发学社

ceshiren.com

JUnit5 参数化

  • 在测试流程相同,测试数据需要根据业务需求切换。
  • JUnit5的参数化支持多种形式数据来源。

参数化环境配置

pom 引入

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

JUnit5 简单参数化 @ValueSource

  • 参数化用例的时候使用的注解由 @Test 换成 @ParameterizedTest
  • 单参数化注解 @ValueSource
  • 注意: 如果 @Test@ParameterizedTest 同时使用则会多执行一次

@ValueSource 支持的参数类型

单参数注解支持以下类型的单参数数据的参数化

参数 参数的类型
shorts short
bytes byte
ints int
longs long
floats float
doubles double
chars char
booleans boolean
strings java.lang.String
classes java.lang.Class

@ValueSource示例


public class ParamDemoTest {
    // @ParameterizedTest 注解指明为参数化测试用例
    @ParameterizedTest
    // @ValueSource 单参数注解,示例中为String类型参数化
    @ValueSource(strings = {"张三", "李四", "王五"})
    void testParam(String name) {
        assertEquals(name.length(),2);
    }

}

单参数的问题与解决方案

  • 问题: 很多场景并不会只有一个参数需要进行参数化的验证。

  • 解决方案:使用多参数的参数化方式。

JUnit5 多参数的参数化 @CsvSource

  • 多参数参数化注解 @CsvSource
  • @CsvSource 通过指定的分隔符实现参数化。
public class CsvParamDemoTest {
    // @ParameterizedTest 注解指明为参数化测试用例
    @ParameterizedTest
    // @CsvSource 注解指定数据源为 csv 数据,csv默认分隔符为 ,
    @CsvSource({"张三,3", "李四,15", "王五,8"})
    void testParamCsv1(String name, Integer age) {
        assertEquals(name.length(),2);
        assertTrue(age > 2);
    }

    // @ParameterizedTest 注解指明为参数化测试用例
    @ParameterizedTest
    // @CsvSource 注解指定数据源为 csv 数据,delimiterString 指定数据的分割符
    @CsvSource(value = {"张三|3", "李四|15", "王五|8"}, delimiterString = "|")
    void testParamCsv2(String name, Integer age) {
        assertEquals(name.length(), 2);
        assertTrue(age > 2);
    }
}

JUnit5 CsvFile的参数化 @CsvFileSource

  • 多参数文件参数化注解 @CsvFileSource
  • 在项目的 test/resources 中新增测试数据 csv 文件
  • @CsvFileSource 支持指定的分隔符进行参数化

多参数化注解 @CsvFileSource 示例

  1. 新建数据文件
    • data.csv使用 , 分隔的
    • data2.csv使用 | 分隔的
张三,3
李四,15
王五,8
张三|3
李四|15
王五|8

多参数化注解 @CsvFileSource 示例

  1. 从csv文件中读取数据信息。
    • 读取数据文件使用 , 分隔的
    • 读取数据文件使用 | 分隔的

public class CsvFileParamDemoTest {
    // @ParameterizedTest 注解指明为参数化测试用例
    @ParameterizedTest
    // @CsvFileSource 注解指定数据源为 csv 数据,csv默认分隔符为 ,
    @CsvFileSource(resources = "/data.csv")
    void testParamCsvFile(String name, Integer age) {
        assertEquals(name.length(), 2);
        assertTrue(age > 2);
    }

    // @ParameterizedTest 注解指明为参数化测试用例
    @ParameterizedTest
    // @CsvFileSource 注解指定数据源为 csv 数据,delimiterString 指定数据的分割符
    @CsvFileSource(resources = "/data1.csv", delimiterString = "|")
    void testParamCsvFile2(String name, Integer age) {
        assertEquals(name.length(), 2);
        assertTrue(age > 2);
    }
}