开发JavaScript - 何时开始编写单元测试?

5
我开始编写一个JavaScript应用作为个人项目。我希望通过这个项目学习和使用单元测试。我没有太多编写单元测试的经验,但我已经阅读到Jasmine是一个很好的库,可以帮助我实现这一目标。
话虽如此,我在最初的编程中有些过于狂热了。我有一个想法,并且追求它。因此,我的应用程序的结构不像我所期望的面向对象。这导致我进行了多次大规模重构。我发现在弱类型语言中进行重构特别容易出现错误再次引入的情况。
我必须回去解决重新引入的错误,这让我渴望编写单元测试。但与此相对应的是,我需要重写代码库的基础结构,这使我犹豫不决。我不想为我的项目创建单元测试,只是为了随后决定需要更多的重构(这将使我的测试失效)。
这是一个常见的担忧吗?我觉得总会有一个时间点,我的“基础”将足够稳定,可以为其编写测试...但这会使测试变得不那么吸引人。

2
我觉得这个问题应该发在 [programmers.se] 上。 - zzzzBov
1个回答

4
我建议您将当前的代码库视为“实验性”或“原型”-也就是说,您大部分会舍弃它。
如果您计划重构代码库,则最好在重构之前或重构后引入单元测试。
编写现有代码库的测试的好处是非常明显的:您可以运行重构后的代码库来验证功能。在重构时, 您可能需要对测试进行一些重组,但这是正常的。
请勿在重写测试时删除它们。尽量保持每个测试中的最终断言相同,同时替换测试的其他内容。这样,您应该能够更好地跟踪正在测试的内容,并确保新功能仍然完成了同样的任务。
当然,如果您以非面向对象的方式编写原始代码,则很难对其进行良好的测试。在这种情况下,我建议选择为原始代码编写高级别测试(功能测试),或使用TDD类型方法编写重构后的代码。
使用功能测试,您可以对应用程序的主要功能进行测试覆盖。与单元测试相比,您不会有如此细致的测试,但您可以更轻松地编写测试,并且最终无需进行太多修改。您可以使用Selenium等工具来实现这一点。
采用TDD方法,您可能需要做的工作最少。您将确保新编写的代码得到很好的测试覆盖率,但是您必须手动验证代码的工作方式与旧代码相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接