如何编写单元测试

2025-06-07

如何编写单元测试

作为编程新手,你经常会听到有人建议你测试代码。这是一个很好的建议——让我们来看看如何开始测试吧!

什么是单元测试

测试是一种明确设定代码期望的方法。建立测试是为了让机器检查你的代码是否符合预期。

它是一个验证你的程序的程序。

通常,在 JavaScript 项目中,你会使用一些测试库,例如:

  • 笑话,
  • 茉莉花,或

但这些只是工具而已。重要的是,你需要某种方法来自动验证你的应用程序。

图片描述

单元测试如何帮助您

编写测试可以通过四种方式使您的编码生活变得更轻松:

  1. 这是一种快速可靠的方法,可以检查代码是否按预期运行。您无需考虑所有边缘情况,单元测试即可涵盖所有情况。
  2. 良好的测试覆盖率就像一张安全网,能让你更有勇气地重构代码。这样,你更有可能采取必要的措施来维护代码库的良好状态。
  3. 编写单元测试迫使您思考单元以及如何在它们之间分配责任,从而使您的代码更加模块化且更易于维护。
  4. 单元测试可以让你写得更快。起初,你需要投入时间创建测试用例,但一旦测试用例准备就绪,你就可以非常经济地重新运行它。即使在开发初期,这项投资也能带来回报。

搭建脚手架

在测试功能之前,请确保您可以测试任何内容。安装测试库并设置测试脚本。一旦运行起来,您就可以开始为一些测试搭建脚手架。您需要确定命名约定。例如,如果您的代码是my-project/plane-ticket.js,那么您的测试代码可以放在 中my-project/plane-ticket.spec.js

构建测试给定类所需的一切,然后检查一些琐碎的方面:

  • 如果一个对象是一个对象,或者
  • 如果一个函数是一个函数

通过这种方式,你将证明你可以测试事物。

设置模拟

模拟对象是为了替换测试单元的依赖项而创建的。例如,如果您测试某个saveBlogPost函数,则需要在函数发送 HTTP 请求之前拦截该请求。您需要找到函数发送请求所使用的方法,并将其替换为模拟对象。如果您使用依赖注入模式构建代码,那么模拟应该会很容易。

图片描述

保持结构

如你所见,每个测试都有很多事情要做。你可以区分出三个主要阶段:

  1. 设置模拟
  2. 运行您想要检查的代码
  3. 检查期望

在代码中保持这种分离是有意义的;这样更容易阅读。一个简单的组织方法是将所有行分组,并添加注释说明它们属于哪个部分。

测试驱动开发

测试驱动开发是一种常用的方法,可以创建具有良好测试覆盖率的优质代码。首先,在函数实现之前添加测试。运行测试,结果应该会失败——如果没有,则说明存在严重错误,需要进行调查。测试失败后,您将缺失的实现添加到代码中。同样,期望仅凭这一点就能修复故障。如果一切顺利,您可以投入一些时间来改进解决方案——包括代码和测试方面,而无需更改逻辑。这种方法可以让您快速迭代创建代码及其测试。

如果你遵循这种做法,你就不会错过任何逻辑测试。你不会想跳过编写测试——当你在冲刺结束时才开始编写测试时,这是一个常见的问题。

图片描述

反建议

要想引领,你必须清楚自己的方向。如果你需要探索哪些解决方案是可行的,可以暂时忽略测试。一旦你明确了方向,就可以添加测试,或者再次以测试驱动的方式解决问题。

缺少测试

如果你运气不好,你可能会处理没有测试和任何其他质量相关措施的遗留代码——就像我在这里描述的那样。在这种情况下,迟做总比不做好;你可以在处理代码库时开始编写测试。这样,你将改善未来的情况,也许你会发现一些隐藏在一些罕见边缘情况下的棘手错误。

你呢?

你觉得学习测试有多难?我在网上看到有人抱怨很难找到好的测试资源。请告诉我你目前为止的学习经历。

文章来源:https://dev.to/marcinwosinek/how-to-write-unit-tests-52dl
PREV
Spring Security:深入身份验证和授权
NEXT
使用 REM 并不能让您的网站响应式——原因如下