真正吸引我关注 TDD 的一件事是在实现的同时清晰地开发规范。
我正在寻求实现一个接受配置对象的构造函数
function MyConstructor(conf) {}
conf
目前指定有两个键:a
and b
, where a
is aRegExp
和b
is a Function
, 作为我的 TDD 规范说明野心的一部分,我正在编写测试来指定这个对象:
- 我想
MyConstructor
抛出一个Error
ifa
不是 aRegExp
或b
不是 aFunction
。 MyConstructor
抛出一个Error
ifa
或b
配置中缺少。
现在,我知道我可以将此行为封装在其他构造函数中,比如Configuration
创建“配置”对象的构造函数。但是我现在看到的方式,无论这种行为最终在哪里结束,这种行为都必须封装在某个地方,以便通过 TDD 详细说明这个规范。
问题是:在我看来,随着conf
对象上键的数量增加,测试的数量也在增加——呈指数增长!这尤其是由于上面的第二个项目符号。
例如,假设我有 4 个键:a
、和,并且我需要确保如果缺少任何键,则会引发错误b
。似乎这需要我编写大量相同的、平庸的测试来涵盖丢失键的所有可能性(组合!)。这听起来不对!然而,我想不出一种明确或归纳测试涵盖所有场景的好方法。有什么想法吗?c
d