开始编写单元测试(和其他类型),我意识到一些测试(验收测试等)可以快速发展成相当复杂的软件,并且感觉可能是某些单元测试(或者至少比原始测试更短的测试)一)验证可能存在更长的测试。
“测试测试”可能听起来很愚蠢,但我想知道是否有人练习这个以及是否有任何已知的“测试测试”最佳实践?
答案 0 :(得分:4)
测试测试生产代码,生产代码应测试测试。 ;-)也就是说 - 你主要想要测试一个测试的是它正确测试了它要测试的代码。执行此操作的主要方法是使代码错误并看到测试捕获它。
有一些工具可以自动执行此操作,并通过查看可以对未被测试捕获的代码执行的突变来测量测试覆盖率。请参阅Mutation Testing。
如果您的测试很复杂,您应该重构它们并将一些复杂性提取到测试助手中。有了足够的这些,你可能最终会构建类似于测试框架的东西, 将值得测试。实际上,JUnit,RSpec,Cucumber,FitNesse等都是测试框架,并且有测试框架来测试框架。
你应该尽量保持测试本身的简单性,使你相信它们有效。但是通过突变测试进行验证可能是值得的,特别是因为它还可以衡量您的覆盖范围。
答案 1 :(得分:2)
Big tests have little tests upon their backs to verfy'em. And Little tests have lesser tests, and so ad infinitum.
答案 2 :(得分:1)
不要测试测试。简单地假设它们是正确的并继续前进。
如果较低的测试失败,当然较高的测试将失败。这是可以理解的。 (我建议做一个说明“这个测试依赖于测试X,Y和Z传递。”如果通过快速概述更高的测试不直观。)但是你不需要特定的测试来确保在继续之前,另一个测试工作 - 测试套件应该运行所有测试。
答案 3 :(得分:1)
我认为如果你必须测试你的测试你做错了什么。在我看来,测试应该非常简单。但是,您可以做的是衡量您的测试有多好。也许你想知道你的测试有多少代码覆盖率.. 但是那不是你想的测试,是吗?
无论如何,这可能是浪费时间.. :)
答案 4 :(得分:1)
你在这里谈到了一些事情。让我试着掩盖它们......
如果你已经编写了一个内部测试框架,那么它应该围绕它进行一些测试。如果您没有使用现成的框架和工具,那么您需要知道框架本身的工作方式与预期的方式相同。测试将提供。
测试是对代码的仔细检查。最好从不同的角度再次测试代码,而不是编写测试测试。我会花时间扩展我的测试数据集或构建模糊测试器或其他一些此类练习以扩展测试覆盖率,而不是花时间编写代码来测试测试本身。
您应该正式化测试过程。制定一个测试计划(即使它只是维基中具有repro步骤的方案列表)是一个巨大的,从大多数人的测试工作开始。在检查代码存储库之前/之后,您还应该对测试进行某种形式的代码审查。这将有助于捕捉一些小错误,比如“哦......你没有意识到当x
为真时它总是返回五个?”
当测试失败时,测试人员应该检查的第一件事是测试是否正确。 (通常因为这是开发人员要坚持的第一件事,测试是错误的,他们的代码是正确的。)吞下你的骄傲并验证测试是否100%正确,然后试着弄清楚是否有错误运输代码。您正在使用错误跟踪软件,对吗?当测试被破坏时,会提交错误,不是吗?分享这些测试错误有助于每个人学习如何成为更好的测试人员。
最后,当所有测试都通过时,测试者应该是最警惕的!再次仔细检查所有内容,并利用这段时间以新的方式扩展测试覆盖范围,如模糊测试,基于模型的测试等。