YAGNI在编写测试时是否也适用?

Sru*_*uly 13 language-agnostic tdd unit-testing yagni

当我编写代码时,我只需要编写我需要的函数.

这种方法是否也适用于编写测试?

我是否应该提前为每个用例编写一个测试,我认为只是为了安全起见,或者我应该只为用例编写测试?

tva*_*son 13

我认为在编写方法时,您应该测试预期和潜在的错误路径.这并不意味着您应该扩展您的设计以涵盖所有可能的用途 - 在需要时留下它,但您应该确保您的测试已经定义了无效参数或其他条件下的预期行为.

据我所知,YAGNI意味着您不应该开发尚不需要的功能.从这个意义上说,你不应该编写一个测试来驱动你开发不需要的代码.我怀疑,这不是你要问的问题.

在这种情况下,我会更关心你是否应该编写涵盖意外用途的测试 - 例如,由于传递null或超出范围参数而导致的错误 - 或者重复仅针对数据而不是功能而不同的测试.在前一种情况下,如上所述,我会说是的.您的测试将记录方法在遇到错误时的预期行为.这是使用您的方法的人的重要信息.

在后一种情况下,我不太能给你一个确定的答案.你当然希望你的测试保持干燥 - 即使它有不同的数据,也不要写一个只重复另一个测试的测试.或者,您可能不会发现潜在的设计问题,除非您处理数据的边缘情况.一个简单的例子是计算两个整数之和的方法:如果将它maxint作为两个参数传递会发生什么?如果您只有一个测试,那么您可能会错过这种行为.显然,这与前一点有关.只有你可以确定何时真正需要测试.


Jos*_*eph 9

是的,YAGNI绝对适用于编写测试.

举个例子,我不会编写测试来检查任何属性.我假设属性以某种方式工作,直到我找到一个与常规不同的东西,我将不会对它们进行测试.

你应该始终考虑编写任何测试的有效性.如果在编写测试时没有明显的好处,那么我会建议你不要.然而,这显然是非常主观的,因为你可能认为不值得别人认为是非常值得的.

另外,我会编写测试来验证输入吗?绝对.不过,我会把它做一个点.假设你有一个带有3个int整数参数的函数,它返回一个double.你要围绕这个功能编写多少个测试.我会在这里使用YAGNI来确定哪些测试可以为您带来良好的投资回报率,哪些是无用的.

  • 如果你有一个新的用例需要以一种新颖的方式使用函数 - 写下新的测试.如果测试失败,请修复该功能.现有测试将确保您不会破坏现有代码. (2认同)