关于具有许多属性的对象的单元测试建议
本文关键字:对象 单元测试 属性 于具 许多 | 更新日期: 2023-09-27 18:26:15
我对单元测试还很陌生,但我完全有测试执行特定可测试任务的单个代码单元的想法,然而,我需要编写测试,并对作用于具有50多个属性的对象的方法的输出的准确性提供信心。这些属性的值的组合基于从规则定义对象(使用lambda表达式)注入的规则生成输出,该输出本质上等于百分比。这些输出百分比是"关键任务"的,之前已经过相当懒散的测试,例如规则定义类的质量(每个规则的所有可归因百分比加起来是100%吗),但对象的实际属性还没有。
"数据"对象来自数据库,但我当然可以模拟它。我的问题是需要模拟的数据排列数量,以及需要编写的测试数量,以确保数据x、y、z(50多倍指数)几乎不可能。
所以,问题是,这些情况在真正意义上是如何测试的。基于已知"正确"状态和"正确"结果的脚本测试是否可能/合理?单元测试在这种情况下适用吗?如果不适用,还有什么替代方案。
顺便说一句,这是一个很小的重构机会的遗留代码,但前提是我能保证在几天内完成重构和测试的准确性等!
我想你自己已经给出了一半的答案:
这些属性值的组合产生一个输出基于从规则定义对象注入的规则(使用lambda表达式),其基本上等于百分比。
在当前的单元测试中,您将模拟数据和规则。因此,您只需要确保输入和输出方法的行为正确即可。
测试规则是另一项任务。我只能猜测,但通常情况下,您会有一个Excel表或类似的表,其中包含可能的输入值和输出值,以指定此规则的要求。我会将同一个表转换为可读的(csv)格式,并直接使用它来驱动规则的单元测试。
如果是大量的组合阻碍了您尝试生成测试用例,您可以查看所有对测试。
我们使用微软的PICT成功地减少了测试用例的数量,同时仍然有合理的信心覆盖大多数用例。
摘要
例如,如果您希望为分区和卷创建时,域可以由以下内容描述参数:类型、大小、文件系统、格式化方法、簇大小和压缩。每个参数具有有限数量的可能值,每一个都是由其性质决定的(例如,压缩只能是On或Off)或作为等效分区(如Size)。
类型:主、逻辑、单、跨、条带、镜像、RAID-5
尺寸:10、100、500、1000、5000、10000、40000
格式化方法:快速、慢速
文件系统:FAT、FAT32、NTFS
群集大小:512、1024、2048、4096、8192、16384、32768、65536
压缩:打开、关闭这些值有4700多种可能的组合。它会很难在合理的时间内测试所有这些。研究表明,测试所有可能的值对可以提供良好的覆盖率和测试用例的数量将保持可控。对于例如,{Primary,FAT}是一对,{10,slow}是另一对;一单个测试用例可以覆盖多对测试用例。
对于上述参数集,PICT将产生60测试案例。
外卖点数
- 有4700多种可能的组合
- PICT将产生60个测试用例
所有配对
所有配对测试背后的推理这是:程序通常由单个输入参数。
下一个最简单的bug类别包括那些依赖互动的人参数对之间,可以在所有配对测试中被抓住。
涉及以下之间交互的Bug三个或多个参数越来越不常见,而同时是渐进的通过穷举查找更昂贵测试,以所有可能的详尽测试输入。
嗯,我不知道你在用什么语言工作,但在查看了你的个人资料后,我认为.Net可能会参与其中。
如果我是对的,我建议使用数据驱动测试。MSDN提供了一个简短的"快速入门",它帮助我深入了解:如何:创建数据驱动的单元测试自从我读了这篇文章后,我开始发明一种新的变体,用于每个新项目。。。
在VisualStudio中使用这些DDT可以将测试数据存储在XML、CSV或数据库表中。也许您可以编写一些代码来生成必要的值以插入到测试中?
第二个建议是微软的Pex和Moles项目,该项目分析测试中的系统,并在此基础上自动生成测试数据,以找到更极端的测试用例。