【发布时间】:2009-07-03 15:34:22
【问题描述】:
作为this answer 的 cmets 中讨论的后续,TDD 测试是否应该总是首先失败?
考虑以下示例。如果我正在编写LinkedHashSet 的实现,并且一个测试测试在插入副本后,原始的迭代顺序与插入之前的迭代顺序相同,我可能想添加一个单独的测试,即副本不在集合中全部。
第一个测试会先观察失败,然后再执行。
问题在于,使第一个测试通过的实现很可能使用不同的集合实现来存储数据,因此作为副作用,第二个测试已经通过。
我认为看到测试失败的主要目的是确保测试是一个好的测试(很多时候我写了一个我认为会失败但没有因为测试写错的测试)。但是,如果您确信自己编写的测试确实测试了某些东西,那么确保以后不会破坏这种行为不是很有价值吗?
【问题讨论】:
-
我承认,充其量是一个动态语言新手(因此评论而不是答案),但我的直觉是——对于动态语言是的,它取决于静态语言。在静态语言中编译失败的代码将在动态语言中运行,但会导致测试失败。为了让静态语言运行,您必须在被测代码中添加某种基线行为(即使只是空方法),这可能会导致正确编写的测试首先通过。
标签: language-agnostic tdd