【问题标题】:How to write golang integration test with MySQL如何使用 MySQL 编写 golang 集成测试
【发布时间】:2023-03-30 08:54:01
【问题描述】:

我想编写一个使用 MySQL 来测试我的查询的集成测试。如何在 golang 中做到这一点?

这包含几个问题:

  1. 如何在 golang 测试中设置 MySQL(内存中?)服务器?
  2. 如何在每次测试之前/之后清理/重新创建数据模型,以免留下垃圾?
  3. 所有测试完成后如何拆掉mysql?

【问题讨论】:

    标签: mysql testing go integration-testing


    【解决方案1】:

    如果你真的想要一个嵌入式 MySQL,你可以使用 golangs C 绑定来集成:https://dev.mysql.com/doc/refman/5.1/en/libmysqld.html。我还没有看到任何项目将此绑定打包到一个不错的 Go 包中,这将是一个有趣的小项目。

    否则,您可以使用 Docker 设置一次性 MySQL 服务器,但这需要在运行 go test 之前执行一些设置/拆卸步骤。这就是我们在我工作的地方所做的事情。

    在这两种情况下,您都需要编写 setup/teardown 方法来根据测试需要创建和删除表。这些只是普通的 SQL 语句,DROP DATABASE、CREATE TABLE 等。

    Testify https://github.com/stretchr/testify 具有设置/拆卸工具,但只需为此编写一个辅助函数就可以了。

    【讨论】:

    • 让我澄清一下。解决此问题的方法是在测试设置中运行 mysql docker 容器并将代码指向它。我的理解正确吗?
    • 是的,但您可能希望在代码之外执行此操作。我们在这里所做的是将 docker setup 放在 Rakefile 目标中,然后使用 env 变量配置数据库连接字符串。当然你的开发环境可能不同,这意味着你不能只运行 go test 来测试它。
    • 无耻插件:我写了一个小库,以便使用 docker+go 更轻松地做到这一点:github.com/wrapp/dockfix
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    相关资源
    最近更新 更多