对多个输入文件运行数据驱动的单元测试

Posted

技术标签:

【中文标题】对多个输入文件运行数据驱动的单元测试【英文标题】:Running a data driven unit test off more than one input file 【发布时间】:2011-08-17 21:21:41 【问题描述】:

背景:在我们的项目中,我们有一堆定义加载到报告生成器中的测试的 xml 文件。由于我们想确保我们的测试保持准确,我们设置了数据驱动的单元测试来测试 xml 输入是否产生相同的输出。这目前保存在一个大型 excel 电子表格中,并且与 Visual Studio 的数据驱动单元测试配合得很好。但是,这会导致问题,因为通常不止一个开发人员会进行测试,他们需要获取电子表格来添加单元测试。如果另一个开发人员拥有电子表格,那么他们将等待它重新签入,因为 VS 无法合并 Excel 文件。另外,我们想切换到 git,但这种方法也不能很好地工作,因为没有对 checkout 的锁定以及无法合并二进制文件。

因此,我们正在尝试切换为在文件夹中为每个单独的测试的一组单元测试设置一个单独的文件。然后,当运行单元测试时,我们加载文件夹中的所有文件并运行每个文件中的测试数据。这样,当开发人员进行新测试时,他们只需为单元测试添加一个新文件,而不必向中心文件添加一个条目。

所有文件的数据格式都是相同的,所以实际上,即使将它们连接在一起也应该有效。但是,我正在尝试这样做并保留数据驱动的行为,其中测试数据中的每一行都相当于输出中的一个测试;它们都分别通过或失败/产生输出消息。

是否可以对多个文件运行数据驱动的单元测试?如果是这样,我们还能在结果中保留“一行 == 一次测试”样式的输出吗?

【问题讨论】:

【参考方案1】:

我最终为单元测试类提供了一个 ClassInitialize 方法,并使该类包含我作为部署项目所需的文件文件夹。然后,ClassInitialize 方法获取文件夹中的所有数据文件并将它们连接在一起。然后,该类中的其他测试在其 DataSource 属性中引用了该文件。这让我可以使用多文件布局并仍然保留我们想要的输出样式。

从中得到的主要教训:数据驱动单元测试的数据源文件显然不必在编译时存在。

【讨论】:

以上是关于对多个输入文件运行数据驱动的单元测试的主要内容,如果未能解决你的问题,请参考以下文章

数据库驱动的 CodeIgniter Web 应用程序中的单元测试

如何快速掌握DDT数据驱动测试?

Python+unittest+DDT实现的数据驱动测试

pytest接口自动化测试结合单元测试框架pytest+数据驱动模型+allure

如何在 Visual Studio 2010 中并行化数据驱动的单元测试?

基于Python Requests的数据驱动的HTTP接口测试