【发布时间】:2020-07-13 13:55:36
【问题描述】:
我是 TDD 实践的新手,我想知道我的方法是否适合特殊情况。
我想编写一个小软件,它在参数中获取一组数组字符串并拆分该组中的所有字符串。
例子:
{"C - 3 - 3", "M - 5 - 5"} 应该返回 { {"C", "3", "3"}, {"M", "5", "5"} }
通过解决问题,我开始使用带有 TDD 的 StringSplitter 和 StringSplitterTest,以便将一个字符串拆分为一个字符串数组。
之后,我编写了一个 StringGroupSplitter 和 StringGroupSplitterTest(总是使用 TDD 方法)做同样的事情,但是使用一个字符串数组(知道 StringGroupSplitter 具有 StringSplitter 依赖项)。
所以,我想起了单元测试的“FIRST”原则,尤其是独立性原则,即测试不应该依赖于另一个测试的结果。
在我的情况下,问题是由于StringGroupSplitter和StringSplitter的依赖,如果StringSplitterTest中只有ont测试失败,StringGroupSplitterTest中的测试也会失败。
所以我的问题如下:我的 TDD 方法是否正确?
提前致谢。
【问题讨论】:
-
独立的想法是改变测试的顺序不应该改变它们是否通过或失败。损坏的功能会导致多个测试(在多个级别:单元、集成、e2e...)失败是可以的。
-
我建议使用依赖注入来独立于任何依赖。然后,您可以为任一组件编写测试而不影响另一个组件。
标签: c# unit-testing oop testing tdd