说,我正在为下面声明的两个函数编写单元测试:
void target_func_1(int param1, int param2);
void target_func_2(int param1, int param2, int param3, int param4, int param5, int param6);
对于上述两个函数,所有输入参数都应为-1或正数。
下面列出了验证target_func_1
输入参数的所有可能测试用例
这看起来很简单。但是,target_func_2
呢?六个输入参数可能有极端数量的可能组合。我是否必须为target_func_2
编写所有这些测试用例?
答案 0 :(得分:3)
简单的答案是:你没有编写一个带6个参数的方法。
换句话说:当你读到清洁代码时(例如通过罗伯特·马丁和其他人研究这个名字的优秀书籍),你会发现如此大量的参数绝对是< EM>气馁
请理解:这不仅是因为您对测试有如此多的排列 - 但除此之外:这些参数可能都在您的生产代码中使用。
从这个意义上讲,真正的答案并不是如何合理地测试这样的方法。它是:你不能以合理的方式测试这些方法;你不能以合理的方式实现它们,因此你不应该写它们。
(请注意:这是关于必须根据参数做出决定的方法;如果你说,只是打印它们,例如它将是一个有点不同的故事)
正如多少一样,让我们引用上述书:
函数的理想参数数量为零(niladic)。接下来是一个(monadic),紧接着是两个(二元)。应尽可能避免三个论点(三元论)。超过三个(polyadic)需要非常特殊的理由 - 然后不应该使用。
请注意:这是基础编程语言的独立!
对于遗留代码,我建议使用双折方法。首先,您要关注该方法的公共合同。含义:你试图理解“什么进入”和“什么出去”。然后,您可以进行一些覆盖率测量,并可能添加更多测试(针对该方法中的某些路径进行定制)。但是为了记录:你编写测试使你能够重构那些遗留代码。
除此之外:另一种方法可能是基于 QuickCheck 的想法来研究测试。含义:指定方法的属性,然后框架为您创建随机参数,并尝试查找导致失败的情况(关于这些属性)。