unit-testing - 什么时候不/在实现前编写测试?

标签 unit-testing testing automated-tests methodology

<分区>

我不确定“先测试”是如何运作的,我想听听关于何时以及为什么会采用这种方法的争论。

我听说通常建议在编写一行实现之前先编写测试和模拟内容。但是,我不禁认为它并不适合所有情况。 例如,假设我正在制作一个原型(prototype),但我不确定一切将如何运作。因此,我只是开始寻找我认为需要的每个步骤的示例,并将它们放入我的代码中。最后我得到了我的理论的证明并且没花那么长时间。这本质上是“我的测试”。这不是单元测试,而是测试(很可能是控制台应用程序)。

这几乎就是我的工作方式。我思考我想做什么,并努力去做。如果它有效,那么我最终会回去编写单元测试,以便我可以捕获回归。这与您“应该做的”有什么不同吗?

最佳答案

总体规则是:先做风险最大的事情。

首先做测试用例,隐含地争论编码中风险最大的部分是对正在创建的对象的接口(interface)和行为的错误传达和误解。

对于许多项目来说,这很可能是正确的,TDD 在这些情况下非常合适。

然而,在许多项目中情况并非如此,在这些情况下应用 TDD 是一个糟糕的选择。

如果您面临的最大风险是可用性,请停止对单元测试胡思乱想并进行一些 UI 原型(prototype)设计。

如果您的最大风险是性能,请先做一些性能原型(prototype),不要担心接口(interface)。

这个列表还在继续。

先做有风险的项目有很多好处:

  • 在许多资源被浪费之前,不可避免地注定要失败的项目会提前结束。

  • 陷入困境但可以挽救的项目尽早得到项目管理的关注,因为它可以起到一定的作用。

  • 如果项目失败的风险较低,您组织的业务部门就会对项目给予更高的评价;它被不必要地提前取消的可能性较小。

关于unit-testing - 什么时候不/在实现前编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319513/

相关文章:

unit-testing - 在域对象约束中使用 grails 配置值

unit-testing - 自动化性能测试

testing - 如果至少有 1 次成功执行,如何配置 TestCafe 隔离模式以通过?

Python日志模块: how to save log to a file if (and only if) assertion test fails?

c# - 在测试中使用已实现的方法是好主意还是坏主意?

.net - 单元测试WCF方法

javascript - 测试 RxJS observable 来跟踪最后发出的值(没有完整信号)?

angular - 如何使用 karma 在 Angular 中对异步 ngIf 进行单元测试

node.js - 使用istanbul时,有没有办法动态要求config.js?

python - 多次运行 pytests 目录