如何在测试中表达 function/method 参数的 "don't care" 值

How to express "don't care" value for a function/method argument in a test

我正在准备单元测试用例,其中我使用一个或多个参数调用方法。出于测试用例的目的,某些参数的确切值可能并不重要,只要它们来自可接受的输入范围或其子范围(例如非零)即可。

我希望我的测试用例的未来读者能够理解我的意图。我不希望他们花时间弄清楚为什么使用某个值。

有没有人对此建立解决方案?是否有任何测试框架为“无关”值提供抽象?是否有广泛的编码约定或技术?

我最感兴趣的是 C、C++ 和 Python,但我相信这个问题适用于许多编程语言和技术。

“只要在可接受的输入范围内”与“不在乎”是不一样的。

如果参数值需要有效,但实际值对测试用例无关紧要,我通常将值定义为常量或变量,这样命名,reader 该值与案例无关。示例:A_VALID_USER_NAME,表示测试用例是关于使用有效用户名调用 function/method。

一种选择是使用 telling variable names

  • 如果你有一个有效的数字,你可以调用变量 aValidNumbervalidNumber
  • 如果是任意字符串,可以调用变量anyString.
  • 另一方面,如果该值是 无效 phone 数字,则使用 invalidPhoneNumberanInvalidPhoneNumber

xUnit Test Patterns 一书还建议使用名称 dummy 来指示仅用于满足编译器或解释器的值。

您还可以使用 Test Data Builders 让读者清楚哪些值很重要,哪些不重要。

基于

属性 的框架,例如 QuickCheck(有许多语言的端口)通常会更进一步并使用称为 Arbitrary 的抽象,其中 Arbitrary顾名思义,instance 是一个任意的、随机生成的值。