我已经开始将JavaScript应用程序编写为个人项目.我希望学习和使用该项目的单元测试.我在编写单元测试方面没有太多经验,但我已经读过Jasmine将是一个很好的库,可以帮助我实现这一目标.
话虽如此,我在最初的编码热潮中有点过分热心.我有一个想法,并与它一起跑.因此,我的应用程序的结构过去并且仍然不像我希望的那样OO.这让我走上了多个大型重构的道路.我发现用弱类型语言进行重构使我特别容易出现错误重写.
事实上,我不得不回过头来解决我重新引入的错误,这让我渴望单元测试.然而,相比之下,我正在重新修改代码库的基础这一事实仍然让我犹豫不决.我不想为我的项目创建单元测试,只是为了决定是否需要进行更多的重组(这会使我的测试弃用“纠正错误”).
这是一个共同的问题吗?我觉得会有一个时间点,我的“基础”将足够稳定,可以为它编写测试……但这使得测试听起来不那么吸引人了.
如果您打算重构代码库,那么在重构之前或重构代码之前引入单元测试可能是个好主意.
为当前代码库编写测试的好处非常明显:您可以针对它们运行重构的代码库来验证功能.在重构时,您可能需要稍微重新构建测试,但这是正常的.
在重写测试时你不应该做的就是删除它们.尽量保持每个测试中的所有最终断言相同,同时替换测试的其他方式.这样,您应该能够更好地跟踪您正在测试的内容,并且新功能仍然可以完成相同的工作.
当然,如果您以非OO方式编写原始代码,可能很难对其进行测试.在这种情况下,我建议选择为原始代码编写更高级别的测试(功能测试),或者使用TDD类型方法编写重构代码.
使用功能测试,您可以获得应用程序主要功能的测试覆盖率.您不会像单元测试那样进行细粒度测试,但您可以更轻松地编写测试,最终不需要修改它们.你可以使用像Selenium这样的工具.
使用TDD方法,您可能获得的工作量最少.您将确保新编写的代码具有良好的测试覆盖率,但您必须手动验证代码的工作方式与旧代码的工作方式相同.