5

我已经开始将 JavaScript 应用程序作为个人项目编写。我希望为这个项目学习和使用单元测试。我在编写单元测试方面没有太多经验,但我读到Jasmine将是一个很好的库来帮助我实现这一目标。

话虽如此,我在最初的编码狂潮中有点过分热心。我有了一个想法,并付诸实施。因此,我的应用程序的结构过去和现在都不像我希望的那样 OO。这使我走上了多次大型重构的道路。我发现用弱类型语言进行重构让我特别容易出现错误重入。

我不得不返回并解决我重新引入的错误这一事实使我渴望进行单元测试。然而,相比之下,我如此多地改造我的代码库的基础这一事实仍然让我犹豫不决。我不想为我的项目创建单元测试,然后才决定需要更多的重组(这将使我的测试超过“纠正错误”的程度)。

这是一个普遍的担忧吗?我觉得在某个时间点,我的“基础”将足够稳定,可以为其编写测试……但这会使测试听起来不那么吸引人。

4

1 回答 1

4

我会考虑将您当前的代码库视为“实验性”或“原型” - 例如,您通常会丢弃的东西。

如果您计划重构代码库,那么在重构之前或为重构代码引入单元测试可能是一个好主意。

为当前代码库编写测试的好处非常明显:您可以针对它们运行重构的代码库以验证功能。在重构时,您可能还需要对测试进行一些重构,但这是正常的。

在重写测试时你不应该做的是删除它们。尝试在每个测试中保持所有最终断言相同,同时替换测试的其他工作方式。这样,您应该能够更好地跟踪您正在测试的内容,并且新功能仍然可以完成相同的工作。

当然,如果您以非 OO 方式编写原始代码,则可能很难对其进行很好的测试。在这种情况下,我建议选择为您的原始代码编写更高级别的测试(功能测试),或者使用 TDD 类型的方法编写重构代码。

使用功能测试,您可以对应用程序的主要功能进行测试覆盖。您不会像单元测试那样进行细粒度的测试,但是您可以更轻松地编写测试,并且最终不需要对它们进行太多修改。为此,您可以使用 Selenium 之类的工具。

使用 TDD 方法,您可能会做最少的工作。您将确保新编写的代码具有良好的测试覆盖率,但您必须手动验证代码的工作方式是否与旧代码相同。

于 2012-06-12T16:59:18.357 回答