Unit testing 什么时候应该停止单元测试

Unit testing 什么时候应该停止单元测试,unit-testing,Unit Testing,我经常可以识别出许多被很好地封装并易于进行单元测试的领域,但我也发现许多单元测试似乎并不那么有效的代码——通常是数据访问和用户界面。无论我尝试什么样的单元测试“技术”,我都倾向于发现在这些地方,创建功能性的单元测试不仅需要花费大量的精力,而且这些测试往往非常脆弱,实际上测试不多 什么时候你会停下来,认为单元测试的好处不值得付出代价呢?当项目计划中没有时间进行单元测试,而且时间都花在寻找测试的方法上,而不是朝着项目的目标努力时。如果你有权访问一些实时数据,你可以使用它进行单元测试。你也可以使用数据

我经常可以识别出许多被很好地封装并易于进行单元测试的领域,但我也发现许多单元测试似乎并不那么有效的代码——通常是数据访问和用户界面。无论我尝试什么样的单元测试“技术”,我都倾向于发现在这些地方,创建功能性的单元测试不仅需要花费大量的精力,而且这些测试往往非常脆弱,实际上测试不多


什么时候你会停下来,认为单元测试的好处不值得付出代价呢?

当项目计划中没有时间进行单元测试,而且时间都花在寻找测试的方法上,而不是朝着项目的目标努力时。

如果你有权访问一些实时数据,你可以使用它进行单元测试。你也可以使用数据生成器和随机数据。单元测试只会给你一些信心,让你相信它不会在将来产生问题。如果您对测试有信心,您可以停止单元测试

我倾向于只测试模型数据持久性必须测试模型。UI(桌面应用程序、Web应用程序、命令行界面等)很难测试,所以我只在极少数情况下为其编写测试。

当您可以通过做其他事情来提供更好的价值时。

我喜欢问题的标题。除此之外,我认为这是一个骗局

我会说,当你获得了可接受的自信水平时。此外,就像我工作中的项目一样,我们的时间要求非常紧迫,我真的只需要测试代码的某些部分(而不是全部),以便给我一个良好的信心水平。

通常我只测试模型和控制器。单元测试很难应用于UI,通常我更喜欢手动测试应用程序


如果创建这些测试比每次进行回归时手动测试花费更多的时间,那么测试是无用的(很容易说,但不需要评估…。

如果需要中断测试、中断集成或端到端测试。谷歌的Misko Hevery对此解释得很好

“单元测试为您提供了更多 “你的钱”

这是他文章中最好的引语


除此之外,,当您拥有良好的代码覆盖率,并且正在处理代码的一些边缘情况时,这是停止单元测试的好时机。

就数据访问测试而言,您是否尝试过模拟测试来模拟响应。

我会遵循的基本经验法则是,如果构建单元测试的工作量大于重复手动测试的工作量这一特征是由人类劳动造成的


如果您查看VisualStudioTeamEdition for Testers中的测试项目,就会发现有一个称为“手动测试”的项目,它本质上是一个指导文档,用于告诉用户如何执行测试并手动通过测试。某些事情,如您提到的UI测试,或用于解决底层框架、操作系统或驱动程序中模糊的奇怪或有缺陷的硬件行为的代码,可以更好地通过人眼进行验证。

如果您使用的是TDD,那么当测试列表中的所有测试都成功后,您将停止单元测试


否则,当通过单元测试发现更多bug的成本超过通过QA过程发现bug的成本时,您将停止单元测试。当您通过所有测试的组合达到可接受的代码覆盖率时。

这将在不久的将来造成更大的延迟。这时,诸如截止日期和目标之类的事情开始发挥作用。因此,“当项目计划中没有时间时”-1。在项目计划中没有时间意味着你与利益相关者协商时间、成本或范围,而不是降低质量。我宁愿少一些质量好的东西,也不要那些大部分时间都不起作用的东西。切掉其他测试而不是单元测试TBH,我宁愿失去一个单元测试而不是QA测试或UAT测试。一段代码可以运行得很好,而且永远不会失败,但不能完成所需的任务。