GitBucketがMySQL、PostgreSQL対応したのでマイグレーションのテストをMySQLやPostgreSQLで実行できるようにしたいなぁと思って方法を考えています。
テスト用のDBを立てたりDockerを使ったりするのが一般的な方法なのではないかと思いますが、Javaで利用可能な組み込みMySQLなんていうものも存在するようなので試してみました(以前@makingに教えてもらいました)。
使い方はとても簡単で、Mavenの依存関係を追加して
<dependency> <groupId>com.wix</groupId> <artifactId>wix-embedded-mysql</artifactId> <version>1.0.3</version> <scope>test</scope> </dependency>
こんな感じで使えます。
MysqldConfig config = aMysqldConfig(v5_7_10) .withPort(3306) .withUser("root", "") .build(); EmbeddedMysql mysqld = anEmbeddedMysql(config) .addSchema("gitbucket") .start(); Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/gitbucket", "root", ""); ... mysqld.stop();
初回実行時はプラットフォームに応じたMySQLのバイナリをダウンロードしてくるのでめっちゃ時間がかかりますw ただ、設定もコードで制御できますし、Dockerとか別途整備しなくても使えるのはいいですね。
ちなみにMySQLの組み込み化には以下のツールを使っているようです。
MySQLの他にもこのツールを使ってMongoDB、Redis、Memcached、node.js、PostgreSQLを組み込み化するライブラリが存在するようです。また、これとは関係ないようですがMariaDBを組み込み化しているJavaライブラリもあったりします。
現状では自動テストでこういった外部のミドルウェアが必要な場合はやはりDockerを使うのが筋がいいとは思うのですが、状況によってはこれらのライブラリが有効な場合もあるのではないでしょうか。