使用 Go 进行测试

Test with Go

了解如何测试用 Go 编写的真实、复杂的软件

或大或小,完美的抽象或丰富的全局状态;无论你的代码是什么样子,你都可以学会测试它。

如果这听起来很熟悉,请告诉我 – 您正在学习如何在 Go 中进行测试,而且事情似乎进展顺利。这些教程都很精彩,您迫不及待地想开始将所学知识应用到实际项目中。

您启动编辑器,获取最新项目,创建第一个 *_test.go 源文件,突然感觉您不知道自己在做什么。

*你听到玻璃破碎的声音*

发生了什么?!?!

事情进展得很顺利。所有这些例子都有道理,但现在你甚至不知道从哪里开始。

测试“Hello, world”HTTP 处理程序似乎很容易,但是 如何测试复杂的处理程序呢?您知道,HTTP 处理程序会执行一些实际操作,例如将记录插入数据库,或使用 API 来验证某人的地址。

就此而言,我们如何验证我们的数据库交互是否按我们的预期工作?或者也许您的应用程序有一个全局 DB变量 – 这是否意味着测试根本不可能?

我们正在与之交互的那些 API 又如何呢?我们会存根它们吗?我们是否使用了测试 API?如果我们达到 API 速率限制或者甚至没有测试 API 会发生什么?

好吧好吧!喘口气,让我告诉你一个小秘密……

测试并不难,但简单的教程并不能很好地体现它

测试并不比编写任何其他 Go 代码更难。事实上,如果我们愿意,我们可以通过编写一个 main包并与我们的应用程序代码交互来测试我们的代码。当某些事情没有按照我们预期的方式运行时,我们可能会感到恐慌,而中提琴 – 我们有一个测试!

但为什么感觉这么难呢? 可能是因为我们将示例简化到了它们失去所有价值的程度。

想一想,你最后一次编写函数是什么时候 Palindrome ?

绝不?那么为什么所有这些教程都向我们展示如何测试呢?

他们为什么不向我们展示如何测试真实的软件?我们测试需要访问数据存储的真实 HTTP 处理程序的示例发生了什么?或者我们构建 API 客户端并学习如何测试它而不总是使用真正的 API 的教程。如果我们能够学习如何使用真实的数据库来测试真实的 Web 应用程序以及如何与Stripe这样的支付 API 进行真正的集成,那不是很棒吗 ?

使用 Go 进行测试是不同的。

在本课程中,您将学习如何测试真实软件,而不是回文函数。

我们必须查看一些孤立的示例才能学习特定的测试技术,但这不足以巩固概念,因此我们不会就此止步。我们将构建真实的项目,教您如何在真实的软件中应用所有这些测试技能。

在一个项目中,我们构建了一个 Web 应用程序,它使我们能够解决在测试使用数据库、第三方 API 等的应用程序时出现的复杂性。在另一个项目中,我们研究内部测试如何帮助我们验证中间步骤是否正确,同时还讨论测试未导出函数的缺点。

您将了解要避免的常见陷阱,以便编写更多可测试的代码。您将学习如何逐步修复已经陷入许多此类陷阱的代码,从而避免出现让审阅者伤心欲绝的大规模 PR。

当您遇到具有全局数据库变量的应用程序时,您不需要放弃测试。您将准确学习如何对代码进行小的、可管理的更改,从而使您几乎可以立即开始测试它。

下次当您被问到是否应该模拟数据存储或者是否应该使用真正的 SQL 数据库时,您将能够与您的队友讨论这两种方法的优缺点,并决定适当的行动计划。

完成本课程后,您将具备开始测试自己的项目所需的知识和技能。你仍然需要投入工作,但神秘、困惑和沮丧都会消失。

简而言之, 您将成为团队中事实上的测试专家。您将致力于让您团队的软件成为一个更快乐、更健康的度过一天的地方。哎呀,你甚至可能会获得 加薪或更好的工作机会!😉

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。