如何使用 MySQL 编写 golang 集成测试

How to write golang integration test with MySQL

我想编写一个集成测试,使用 MySQL 来测试我的查询。如何在 golang 中执行此操作?

这包含几个问题:

  1. 如何在 golang 测试中设置 MySQL(内存中?)服务器?
  2. 如何clean/recreate数据模型before/after每次测试不留下垃圾?
  3. 所有测试完成后如何拆除mysql?

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

否则您可以使用 Docker 设置一次性 MySQL 服务器,这需要一些 setup/teardown 步骤才能 运行 进行测试。这就是我工作的地方。

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

证明 https://github.com/stretchr/testify 有用于 setup/teardown 的工具,但只需为此编写一个辅助函数就可以了。