如何用MySQL编写golang集成测试

I want to write an integration test that uses MySQL to test my queries. How to do this in golang?

This contains few questions:

  1. How to setup MySQL (in-memory?) server in golang test?
  2. How to clean/recreate data model before/after each test so that they do not leave garbage behind?
  3. How to tear down mysql after all the tests are done?

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.