作为 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
- ETC...
正如您所看到的,这些测试用例数量众多,并且不能令人满意地测试我真正想要的实际行为。我心中的数学家想要做某种 TDD-by-induction
list
不包含任何物品时- 返回-1
- 当
list
包含 N 项时,调用predicate
第一项,然后递归调用Find
剩余的 N-1 项
然而,这引入了不必要的递归。对于上述方法,我应该在 TDD 中编写什么样的测试用例?
顺便说一句,我真正尝试测试的方法只是Find
,仅针对特定的集合和谓词(我可以独立编写测试用例)。当然,我应该有一种方法可以避免编写上述任何测试用例,而是简单地测试该方法是否使用正确的参数调用了其他一些Find
实现(例如)?FindIndex
请注意,无论如何,我仍然想知道如何进行单元测试Find
(或其他类似的方法),即使事实证明在这种情况下我不需要。