|
|
1
3
当测试失败时,有三种选择:
正确识别这三个选项中的哪一个很重要。我编写测试的方式是,以测试的名义记录测试指定/测试的行为,这样当测试失败时,我就能很容易地发现 为什么? http://blog.orfjackal.net/2010/02/three-styles-of-naming-tests.html 就你而言,
(有趣的是,如果你发现自己 重写 类,而不是更改它们,当需求更改时,它可以表示代码遵循得很好 SRP, OCP 以及其他设计原则。) |
|
|
2
4
“测试失败导致我调整测试断言,而不是在实际的代码库中修复回归错误。”
“这让我觉得我一天浪费了x个小时”
“解决测试断言失败通常比解决实际的回归错误需要更长的时间” 不是开玩笑。当您的需求处于不断变化的状态时,将需求更改映射到测试结果更改需要花费大量的时间和精力。 “这是。。。反直觉的。取决于你的直觉。我的直觉(经过18个月的TDD)是需求变更导致了设计变更,许多复杂的测试变更反映了设计变更。
如果你的代码真的很好,它不会改变太多。当你花更多的时间在测试上而不是代码上时,就意味着你写了好的代码。
当你花更多的时间试图让代码通过一组永远不会改变的测试时,代码的味道就会显现出来。想想这意味着什么。你写了测试,但你就是不能让代码通过。太可怕了。 如果你花了一个小时编写测试,花了4个小时试图让代码通过测试,你要么得到了一个非常复杂的算法(并且应该把它分解成更多可测试的部分),要么你是一个糟糕的应用程序程序员。 如果你花1小时写测试,花1小时让代码通过测试,那就好了。
如果您因为需求更改而花了2小时修复测试,并且花了1/2小时调整代码以通过这些测试,那么您已经编写了一些非常好的代码。 |
|
|
3
1
我绝对赞同@S.Lott的回答。我只想指出,当规范建立在成堆的死树上时,当需求发生变化时,死树(或字处理器文件)不会像测试那样对你大喊大叫,所以一切都正常运行,只是你有一堆枯树,每个人都看着,说“文件是虚构的。” 也就是说,在有些情况下,测试编写得不好或不实用,可能应该放弃。我发现,尤其是在TDD中,测试梳理出了设计,而且是真正的增量测试,现在设计和功能更进一步了,一些原始测试已经不再相关了。 如果你认为修改一堆测试是“浪费了我一天的x个小时”,那么当你转到第二个测试时,你不会在第一个测试通过后再考虑它。这将使变革的成本更高。这可能是正确的决定,但是看着一个测试,说它被后来的事件克服了,然后放弃它,这没有错,只是不要把它当作一个廉价的出路。 |
|
|
4
0
S洛特差不多都说了。我认为测试断言更改(T)与回归修复(R)的比率唯一能告诉您的是,您的需求有多不稳定(这将使T更高)与应用程序代码通过测试的成功率(这将影响R的值)的组合。这两个因素可以根据需求和开发过程的质量而独立变化。 |
|
|
wavesinaroom · 断言结构向量长度 1 年前 |
|
|
Tim Kirkwood · 比较空数据帧 1 年前 |
|
Kamran Khan · 使用单元测试ASP。NET核心 2 年前 |
|
|
paymer · 为什么我的代码没有删除我的单元测试生成的zip文件? 2 年前 |
|
|
Ricky Mo · 角度测试如何模拟导入的const 2 年前 |
|
|
Natty · Visual Studio中缺少“代码覆盖率结果” 2 年前 |