TDD - 我应该为这个函数编写哪些测试?

4

我已经阅读过,应该首先编写简单的基本测试,并逐渐转向更难的测试。对于以下函数,我应该按顺序编写哪些测试?

function List.syncWithList(lst)

  • 应该将不在列表中但在lst中的任何项目添加到列表中
  • 应该删除列表中不在lst中的任何项目
  • 应该替换列表中具有与lst中不同版本标签的任何项目
  • 不应该替换列表中具有与lst中相同版本标签的任何项目

2
你提供了一份测试事项清单。你还想要什么? - S.Lott
1个回答

8
您有一份基本测试列表,您已经提供给我们了。至少,您应该测试每个功能需求是否已满足(例如,您在问题中提供的四个要点)。
除此之外,还有边缘案例,例如空列表(在左侧和右侧都有),相同的列表等等。
开始最简单的方法是添加以下内容:
- 在两侧均为空的空列表。 - 相同的列表。 - 左侧为空的一个元素右侧列表。 - 左侧为一个元素且右侧为空的列表。 - 上述两个测试案例,但左侧增加五个元素的列表。 - 替换一个元素在一个元素左侧的列表中。 - 替换一个元素在一个左侧拥有五个元素的列表中。 - 替换五个元素在一个左侧拥有五个元素的列表中。 - 检查在相同版本标签上没有进行替换
然后根据遇到的问题逐个添加更多。
我再次强调:自动化您的测试!当您只需按下一个按钮并查看结果时,您会发现测试变得非常容易。每次遇到错误时,请添加可以捕获该错误的测试到以上测试套件中,并按下按钮进行验证。
我们已经将我们的测试做到了炉火纯青。通过一个命令,整个流程就会被执行,清空数据库,用已知的数据加载它们,运行我们的测试,将输出与先前成功的测试进行比较等等。
如果我们每次更改都必须手动执行所有这些操作,我们很快就会放弃整个想法。通过自动化一切,测试非常轻松。

3
这是一个优秀的回答。我只想补充一点,提问者写的项目符号实际上是好的测试名称。你的测试名称应该读起来像对类的作用和预期行为的描述。 - kyoryu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接