注:需要将文件的“复制到输出目录”设置为“总是复制”或者“有更新复制”:
2.在Fixture类型初始化数据库时,执行SQL脚本初始化数据:
下面代码首先去Data目录下查找.sql的所有文件,然后依次执行这些SQL脚本。
3.修改测试代码(因为脚本添加了2条数据,所以期望值应该是3条):
4.执行测试:
测试成功。
数据驱动测试简介文章最开始提到过,不管是白盒的覆盖测试还是黑盒的边界/等价测试,它们最直接的体现就是“参数”,传入被测试方法的参数。而这些参数实际上就是“测试用例”,为每一个测试用例编写一个测试方法是不合理的,所以需要一种方法通过变换参数来完成测试,并且尽可能的重用测试代码。这就是数据驱动测试。
基于xUnit.Net的数据驱动测试 Theory&InlineDataTheory和InlineData是xUnit.Net中提供的数据驱动(参数化)测试的功能特性,下面是一个theory以及InlineData的应用示例:
运行结果:
通过InlineData就可以轻易的将测试用例的数据应用到测试方法上,并完成期望的测试。但是当添加新的测试用例时就需要对代码文件进行修改,测试用例放置在代码中管理也不是非常方便,有没有一种可以独立管理测试用例数据的方法呢?
基于excel的数据驱动测试xUnit.Net没有提供内置的Excel数据加载功能,但是它的拓展性很好,可以通过实现DataAttribute实现一个Theory的数据源提供器:
1. 实现DataAttribute抽象类,实现Excel的Theory数据提供器:
下面是实现Excel数据加载的核心方法:
以上方法需要注意以下几点:
两个主体:Excel文件名称和测试的方法的MethodInfo,前者用于读取Excel文件,后者用来获取参数信息。
通过MethodInfo获取测试方法的参数列表包括参数类型。
读取Excel数据并于测试方法的参数列表匹配,简单来说就是Excel中每一行的数据就是对应测试方法的参数,有多少行数据测试方法就会被执行多少次。
当Excel中数据读取为double或者float但是测试方法需要int时,需要进行转换。
注:此处使用的Excel文件读取组件为:https://github.com/ExcelDataReader/ExcelDataReader
DataAttribute完整代码见:https://github.com/yqszt/xUnitTestDemo/blob/master/XUnitTestProject/ExcelDataAttribute.cs
2.使用ExcelDataAttribute: