作为一个TDD的新手,我在编写处理集合的单元测试方面遇到了困难。例如,目前我正在尝试想出一些测试场景,以基本测试以下方法:
int Find(List<T> list, Predicate<T> predicate);
该方法应返回匹配断言 predicate
的列表 list
中第一个项目的索引。目前我唯一能想到的测试用例是:
- 当
list
不包含任何项目时 - 返回-1
- 当
list
包含1个与predicate
匹配的项目 - 返回0
- 当
list
包含1个不符合predicate
的项目 - 返回-1
- 当
list
包含2个都与predicate
匹配的项目 - 返回0
- 当
list
包含2个项目,第一个匹配predicate
- 返回0
- 等等...
然而,正如您所见这些测试用例数量众多且无法令人满意地测试实际上我想要的行为。作为数学家,我想进行某种归纳TDD
- 当
list
不包含任何项目时 - 返回-1
- 当
list
包含N个项目时,先在第一个项目上调用predicate
,然后在剩余的 N-1 项目上递归调用Find
然而,这会引入不必要的递归。我应该在TDD中编写什么样的测试用例来测试上述方法?
顺便说一下,我要测试的方法确实只是Find
,只是针对特定的集合和断言(我可以独立编写测试用例)。 肯定有一种方法可以避免编写以上任何测试用例,而是简单地测试该方法是否使用正确的参数调用了其他Find
实现(例如FindIndex
)吗?
请注意,在任何情况下,即使在这种情况下我不需要编写上述任何测试用例,我仍希望知道如何对Find
(或类似的另一个方法)进行单元测试。