【发布时间】:2012-07-05 22:22:07
【问题描述】:
作为 TDD 的新手,我正在努力编写处理集合的单元测试。例如,目前我正在尝试提出一些测试方案来基本上测试以下方法
int Find(List<T> list, Predicate<T> predicate);
该方法应返回列表list 中与谓词predicate 匹配的第一项的索引。到目前为止,我能够提出的唯一测试用例是
- 当
list不包含任何项目时 - 返回-1 - 当
list包含 1 个匹配predicate的项目时 - 返回0 - 当
list包含 1 个与predicate不匹配的项目时 - 返回-1 - 当
list包含两个匹配predicate的项目时 - 返回0 - 当
list包含2 个项目,其中第一个匹配predicate- 返回0 - 等等……
如您所见,这些测试用例数量众多,无法令人满意地测试我真正想要的实际行为。我内心的数学家想要做某种 TDD-by-induction
- 当
list不包含任何项目时 - 返回-1 - 当
list包含 N 项时,对第一项调用predicate,然后对剩余的 N-1 项递归调用Find
但是这会引入不必要的递归。对于上述方法,我应该在 TDD 中编写什么样的测试用例?
顺便说一句,我真正尝试测试的方法只是Find,仅用于特定的集合和谓词(我可以独立编写测试用例)。当然,我应该有一种方法可以避免编写上述任何测试用例,而是简单地测试该方法是否使用正确的参数调用了其他一些 Find 实现(例如 FindIndex)?
请注意,无论如何我仍然想知道如何我可以对Find(或其他类似的方法)进行单元测试,即使事实证明在这种情况下我没有需要。
【问题讨论】:
-
你用的是什么单元测试框架?
-
@Kevin Rhino 模拟 + MSTest / Visual Studio 单元测试框架
标签: c# collections tdd