作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TDD 真正吸引我的其中一件事是在实现规范的同时明确制定规范。
我正在寻求实现一个接受配置对象的构造函数
function MyConstructor(conf) {}
conf
目前指定有两个键:a
和 b
,其中 a
是 a RegExp
和 b
是一个 Function
,并且作为我的 TDD 规范阐明野心的一部分,我正在编写测试来规范这个对象:
a
不是 RegExp
或 ,我希望 MyConstructor
抛出一个 Error
b
不是 Function
。 a
或
b
,
MyConstructor
将抛出一个 Error
。 现在,我知道我可以将此行为封装在其他构造函数中,比如创建“配置”对象的 Configuration
构造函数。但我现在看到的方式是,无论这种行为在哪里结束,这种行为都必须封装某处,以便通过 TDD 详细说明此规范。
问题是:在我看来,随着 conf
对象上键的数量增加,测试的数量也会增加——呈指数增长!这尤其是由于上面的第二个项目符号。
例如,假设我有 4 个键:a
、b
、c
和 d
,并且我需要确保如果缺少任何一个错误就会被抛出。 似乎 这需要我编写大量相同的、平庸的测试来涵盖丢失 key 的所有可能性(组合!)。这听起来不对!然而,我想不出一种显式或归纳式测试是否涵盖所有场景的好方法。有什么想法吗?
最佳答案
没有类定义或接口(interface)的对象很难测试。如果您的对象是鸭子,您需要使用ducktyping 来检查。
您还可以想知道完全测试某些功能有多大用处。您可以测试边界,但您永远无法测试所有值;
如果您的函数如下所示:
function sum(a, b) {
if (a === 42) {
throw new Error("All glory to the hypnotoad");
}
return a + b;
}
您希望如何找到这个错误?
关于javascript - 结果呈指数增长的测试场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130758/
我是一名优秀的程序员,十分优秀!