【发布时间】:2020-10-16 16:37:37
【问题描述】:
假设我们有函数foo。 foo 在其实际代码运行之前检查几个初始条件,这些初始条件被布置为连续的 if 条件。如果发生错误,则会通过警报/toast 通知用户。 if 的排列方式如下:
function foo() {
if (!condition_one) {
alert(text_one);
return;
}
if (!condition_two) {
alert(text_two);
return;
}
if (!condition_three) {
alert(text_three);
return;
}
if (!condition_four) {
alert(text_four);
return;
}
// ...
}
在编写这个函数之前,我们按照 TDD 原则编写了我们的第一个单元测试。第一个测试检查condition_one 失败的情况。第二个测试检查condition_one 是否成功,即text_one 没有收到警报。
我们现在复制第一个测试用例并对其进行转换,使其成为检查condition_two 失败的测试。我们必须为此扩展第一个测试用例,因为我们需要让第一个条件成功才能达到第二个条件。我们现在为condition_two 编写后续测试并重复该过程,直到我们测试完所有初始条件。
问题是,每次我们进入下一个条件时,所有先前条件的所有设置代码都会累积,并且该条件的实际设置代码会在混乱中丢失,甚至很难知道我们正在测试什么.
这个问题有哪些可能的解决方案?我知道这正是面向方面编程试图解决的问题,但这不是我的选择。
PS:这个问题也出现在其他大型 if-else 结构中,因此比这个特定场景更适用。
【问题讨论】:
-
请添加测试代码以及您编写前 4 或 5 个测试和代码的顺序的分步示例。
-
我发现在函数中包装条件并将其存根应该是正确的答案
标签: unit-testing tdd organization