为每个功能编写单元测试比只为服务编写 API 测试有什么优势

What's the advantage of writing unit tests for each function over writing only API test for a service

在 Web 应用程序中,有 REST 端点,每个端点都在内部调用各种功能。

可以编写一个简单的 API 请求和响应测试用例来测试 API 的功能。

考虑到开发人员对所需功能进行一些更改的场景,API 测试将失败,开发人员会注意到是他的更改导致测试用例失败。 同样在单元测试的情况下,相应的功能测试用例将失败

那么,当 API 测试用例就足够时,为每个功能编写测试用例的必要性是什么? 请帮助我理解。感谢抽出时间

原因不只一个,我能想到的就这些:

模块化

在编写软件时,您总是尝试使代码模块化和可重用。

一般的编写函数已经遵循了这个哲学: 您可以在整个代码中的许多地方重用该函数,而无需编写重复代码。

单元测试功能使您能够测试单个功能是否满足您对它的期望,无论您在哪里使用它。

这样,当您以后需要再次使用该函数时,您可以信任该函数,也许使用一组新参数可能会使该函数的行为有所不同。您可以有效地单独测试该函数中所有可能的逻辑分支,甚至是您可能尚未使用的 。 (谢谢,@JBNizet)

一旦您必须重构代码,这一点就会变得更加明显。


精度

当您的 API 测试失败时,您不知道可能是复杂应用程序中的哪部分代码导致了问题。

然而,当一个函数的单元测试失败时(这可能会导致 API 测试也失败),您知道该函数中的代码是错误的。它可以为您节省很多时间。


复杂性

API 测试的编写难度成倍增加,尤其是当它们需要覆盖 API.

调用的所有函数的所有可能性时。

这也让他们慢了很多。

(再次感谢@JBNizet)


总的来说,这一切都归结为编程范式 "divide and conquer":将手头的任何问题分解为尽可能小的子问题,直到只剩下微不足道的问题(或在本例中为单元测试)。