JUnit5学习之六:参数化测试(Parameterized Tests)基础 (4)

在这里插入图片描述

Csv格式数据源(CsvSource)

前面的测试方法入参都只有一个,在面对多个入参的测试方法时,@CsvSource就派上用场了,演示代码如下所示,可见数据是普通的CSV格式,每条记录有两个字段,对应测试方法的两个入参:

@Order(12) @DisplayName("CSV格式多条记录入参") @ParameterizedTest @CsvSource({ "apple1, 11", "banana1, 12", "'lemon1, lime1', 0x0A" }) void csvSourceTest(String fruit, int rank) { log.info("csvSourceTest, fruit [{}], rank [{}]", fruit, rank); }

执行结果如下,通过日志可以确定,每条记录的两个字段能匹配到测试方法的两个入参中:

在这里插入图片描述

另外@CsvSource还提供了一个属性nullValues,作用是将指定的字符串识别为null,下面这个设置就是把CSV数据中所有的NIL识别为null,再传给测试方法:

@Order(13) @DisplayName("CSV格式多条记录入参(识别null)") @ParameterizedTest @CsvSource(value = { "apple2, 21", "banana2, 22", "'lemon2, lime2', 0x0A", "NIL, 3" }, nullValues = "NIL" ) void csvSourceWillNullTokenTest(String fruit, int rank) { log.info("csvSourceWillNullTokenTest, fruit [{}], rank [{}]", fruit, rank); }

执行结果如下,可见字符串NIL到测试方法后已变成null:

在这里插入图片描述

Csv文件数据源

@CsvSource解决了测试方法入参有多个字段的问题,但是把作为入参的测试数据写在源文件中似乎不合适,尤其是数据量很大的情况下,这种场景适合用@CsvFileSource,该注解用于指定csv文件作为数据源,注意numLinesToSkip属性指定跳过的行数,可以用来跳过表头:

@Order(14) @DisplayName("CSV文件多条记录入参") @ParameterizedTest @CsvFileSource(files = "src/test/resources/two-column.csv", numLinesToSkip = 1) void csvFileTest(String country, int reference) { log.info("csvSourceTest, country [{}], reference [{}]", country, reference); }

在src/test/resources/创建文件two-column.csv,内容如下:

Country, reference Sweden, 1 Poland, 2 "United States of America", 3

上述代码执行结果如下,代码中没有测试数据,显得更加简洁一些:

在这里插入图片描述

期待《进阶》篇

至此,咱们队JUnit5的参数化测试(Parameterized)有了初步的了解,可以通过各种数据源注解给测试方法制造更多的参数,但仅掌握这些还是不够的,依然有一些问题待解决,例如更自由的数据源定制、跟完善的多字段处理方案等等,下一篇《进阶》咱们一起来体验更多参数化测试的高级功能;

你不孤单,欣宸原创一路相伴

Java系列

Spring系列

Docker系列

kubernetes系列

数据库+中间件系列

DevOps系列

欢迎关注公众号:程序员欣宸

微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjzjw.html