我目前正在使用谷歌的单元测试框架编写嵌入式应用程序的单元测试。现在我的老板对我测试时使用的数据(即我调用被测类方法的值)感到不满,因为这些数据是硬编码在测试中的。他要求从文件中读取这些数据。他的论点是这样做可以更容易地添加另一个以前被遗忘的边角案例的测试。虽然我没有很多单元测试经验,但迄今为止我并不是这样做的。所以我试图找出最好的方法来做这件事——即使这样做是个好主意。我很快就发现了数据驱动测试(DDT)的方法。
谷歌的单元测试框架有一个称为“Value-Parameterized Tests”的功能。使用它,我的测试夹具变成了一个模板类,我可以传递参数。然而,我认为这种方法存在一些问题:
我目前为每个测试类都创建了一个装置。但是,由于每个方法需要一组不同的参数,所以我需要为每个测试方法创建一个装置。这将会增加很多额外的工作。就我而言,我只能传递一个参数。由于我的测试需要几个参数(方法的所有参数加上预期的结果) ,因此这将要求我传递诸如向量或映射之类的东西。再次构建和检索听起来像是很多工作。
“Google Test目前对于......一般数据驱动测试的支持还不够好。我们希望能够尽快在这个领域取得改进。”
谷歌的单元测试框架有一个称为“Value-Parameterized Tests”的功能。使用它,我的测试夹具变成了一个模板类,我可以传递参数。然而,我认为这种方法存在一些问题:
我目前为每个测试类都创建了一个装置。但是,由于每个方法需要一组不同的参数,所以我需要为每个测试方法创建一个装置。这将会增加很多额外的工作。
我想象中的谷歌测试框架应该会让这变得更容易。然而,他们写道:
当您希望通过各种输入(也称为数据驱动测试)来测试代码时,有用的是value-parameterized tests。此功能很容易被滥用,请在使用时行使您的良好判断力!
此外,还有这篇博客文章 TotT: Data Driven Traps,也警告我不要滥用数据驱动单元测试。
因此,我的问题归结为:
- 进行数据驱动的单元测试是否是个好主意?
- 如何使用谷歌测试框架进行数据驱动的单元测试?
“Google Test目前对于......一般数据驱动测试的支持还不够好。我们希望能够尽快在这个领域取得改进。”
operator>>
和结构体。 - sigy