6
votes

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?
1

1 Answers

5
votes

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.