【问题标题】:What's the advantage of writing unit tests for each function over writing only API test for a service为每个函数编写单元测试与只为服务编写 API 测试相比有什么优势
【发布时间】:2019-05-09 14:40:13
【问题描述】:

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

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

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

那么,当 API 测试用例足够时,为每个函数编写测试用例的必要性是什么? 请帮我理解。谢谢你的时间

【问题讨论】:

    标签: unit-testing web-applications end-to-end


    【解决方案1】:

    原因不止一个,下面是我能想到的几个:

    模块化

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

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

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

    这样,当您需要稍后再次使用该函数时,您可以信任该函数,也许使用一组新的参数可能会使该函数的行为有所不同。您可以分别有效地测试该函数中所有可能的逻辑分支,即使是那些您可能还没有使用的。 (谢谢,@JBNizet)

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


    精度

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

    但是,当某个函数的单元测试失败(这也可能导致 API 测试失败)时,您就知道该函数中的代码是错误的。它可以为您节省大量时间。


    复杂性

    API 测试的编写难度呈指数级增长,尤其是当它们需要涵盖 API 调用的所有函数的所有可能性时。

    这也让它们变慢了很多。

    (再次感谢@JBNizet)


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

    【讨论】:

    • 另外一个原因是,为了覆盖服务调用的每个函数内部的所有分支,API 测试比单元测试更难编写,或者慢得多,或者两者兼而有之。功能。
    • @JBNizet 我在回答中添加了您提到的内容,如果您对我的措辞不满意,请随时编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多