6

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

5

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.

Sign up to request clarification or add additional context in comments.

3 Comments

Let me clarify. The way you solve this is that you run a mysql docker container in test setup and points your code to it. Is my understanding correct?
Yes, but you probably want to do this outside of your code. What we are doing here is putting the docker setup in a Rakefile target, and then configure the database connection string with an env variable. Of course your development environment might be different, and this means that you can't just run go test to test it.
Shameless plug: I wrote a small lib to make it easier to do do this with docker+go: github.com/wrapp/dockfix

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.