每个人都会同意,软件测试在软件开发中占有重要地位。但这是为什么呢?通常的回答是它帮助我们维护软件的正确性。这可能是为了测试新代码是否按预期工作,但也为了我们的新更改不会在以前存在的代码中的某处造成错误。然而,这还不是全部。一个经常被忽视的好处是它可以帮助我们编写更清晰的代码,在本文的其余部分,您可以阅读我对单元测试如何帮助我们做到这一点的看法。
测试类型
有很多不同类型的测试。在谈论测试时,重要的是要知道我们在谈论哪种类型。一些类型是:
- 单元测试——这种类型测试独立于其他区域的尽可能小的代码部分。您提供所需的输入并测试基于该输入的输出是什么
- 集成测试——一种测试,您可以获取多个不同且相互关联的代码部分,并测试它们如何协同工作
- 端到端——这是您测试整个应用程序所有部分连接的类型。这可能包括单击 UI 导致与服务器的不同交互并检查它的所有行为
类型更多,但在本文中,我主要关注单元测试。
单元测试
如上所述,单元测试用于测试小而独立的功能。例如一个函数。您调用具有所需参数的函数,并观察基于这些给定参数的结果变化。
要进行良好且高效的单元测试,您可能需要记住一些事项。第一个,也许是最重要的一个是使函数纯净。
如果您不熟悉这个术语,那么要使一个函数成为纯函数,它需要满足两个要求:
- 给定相同的参数集,返回值不会改变
- 该函数没有副作用
如果这没有多大意义,下面的内容可能会更简单一些。如果除非您更改调用它的参数,否则函数的结果不会改变,则该函数是纯函数。此外,该函数不会访问或修改其范围之外的任何数据。
代码改进
现在我们开始讨论单元测试如何帮助您改进代码。
依赖关系
改进的第一步是前面提到的功能纯度。总的来说,这是一个好主意,因为它们很容易重构和移动。但是在编写单元测试时,您可能会遇到模拟太多事物或通常难以模拟它所依赖的事物的问题。这是一个很好的指标,表明您的功能并不纯粹,与其花时间尝试使测试工作,不如花时间改进您的功能。
复杂
单元测试可能指出的下一个需要改进的地方是函数的大小。您可能想在代码中再添加一件事。多一个参数使其更通用。随着时间的推移,它会不断增长并变得相当复杂。当您需要为同一个函数编写许多具有不同参数的测试时,这很好地表明您的代码变得过于复杂,您应该考虑将其拆分成更小的部分。
结论
很多开发者在写代码的时候,只是加上一些好的规则的linting,只要通过就ok了。许多人忽视了将测试作为改进它的方法,并认为测试只是为了确保没有任何问题。虽然本文指出了两个非常简单的领域,但我相信牢记它们很重要。并将它们用作可能改进代码的指南。