mysqld を使ったテストの際に test database がなくてハマった

go で perl でいう test::mysqld のようにテスト用の mysqld プロセスを立てるには github.com/lestrrat/go-test-mysqld を使っている。

しかし、手元だと走るテストが wercker で実行すると test database がないと言われてどうしたものかと思ったら

http://changelogs.ubuntu.com/changelogs/pool/main/m/mysql-5.5/mysql-5.5_5.5.37-0ubuntu0.12.04.1/changelog

こういうことらしく test という名前の database が作られなくなっていた。なので

func TestHoge(t *testing.T) {
    mysqld, err := mysqltest.NewMysqld(nil)
    if err != nil {
        t.Fatal(err)
    }
    defer mysqld.Stop()

    db, err := sql.Open("mysql", fmt.Sprintf("root:@%s/", mysqld.ConnectString(0)))
    if err != nil {
        t.Fatal(err)
    }
    defer db.Close()

    if _, err := db.Exec("CREATE DATABASE IF NOT EXISTS `test`"); err != nil {
        t.Fatal(err)
    }

    if _, err := db.Exec("USE `test`"); err != nil {
        t.Fatal(err)
    }

        .....

こういう感じで database 名を指定せずにつないで test という名前の database を作るようにした。