英文:
How to write golang integration test with MySQL
问题
我想编写一个使用MySQL来测试查询的集成测试。在golang中如何做到这一点?
这里有几个问题:
- 如何在golang测试中设置MySQL(内存中的)服务器?
- 如何在每个测试之前/之后清除/重新创建数据模型,以确保它们不会留下垃圾?
- 在所有测试完成后如何拆除MySQL?
英文:
I want to write an integration test that uses MySQL to test my queries. How to do this in golang?
This contains few questions:
- How to setup MySQL (in-memory?) server in golang test?
- How to clean/recreate data model before/after each test so that they do not leave garbage behind?
- How to tear down mysql after all the tests are done?
答案1
得分: 5
如果你真的想要嵌入MySQL,你可以使用golang的C绑定来集成:https://dev.mysql.com/doc/refman/5.1/en/libmysqld.html。我还没有看到任何将这些绑定封装成一个好的Go包的项目,这将是一个有趣的小项目。
否则,你可以使用Docker来设置一个一次性的MySQL服务器,但在运行go test之前,需要进行一些设置/拆除步骤。这就是我们在我工作的地方所做的。
在这两种情况下,你都需要编写设置/拆除方法,根据需要创建和删除表。这些只是普通的SQL语句,如DROP DATABASE、CREATE TABLE等。
Testify https://github.com/stretchr/testify 提供了设置/拆除的工具,但只编写一个辅助函数也可以正常工作。
英文:
If you really want to have an embedded MySQL, you can use golangs C bindings to integrate with: https://dev.mysql.com/doc/refman/5.1/en/libmysqld.html. I haven't seen any project packing up the bindings for this in a nice Go package, that would be an interesting small project.
Otherwise you can use Docker to set up a throwaway MySQL server, this requires some setup/teardown steps before you run go test though. This is what we are doing where I work.
In both cases, you will need to write setup/teardown methods that creates and drops tables as needed for your tests. These are just normal SQL statements, DROP DATABASE, CREATE TABLE etc.
Testify https://github.com/stretchr/testify has tooling for setup/teardown, but just writing a helper function for this works just fine.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论