scala用のfixtureライブラリ作った
昔作ったscalikejdbcのfixtureプラグイン、これ別にPlayのプラグインにすることはなかったなーとちょっと思ってたんですが、最近実際困りはじめたので、Playに依存しないfixtureライブラリが欲しくなったので作りました。
https://github.com/tototoshi/scala-fixture
依存しているライブラリはないので、SlickのプロジェクトでもScalikejdbcのプロジェクトでも使えます。
インストールは
libraryDependencies += "com.github.tototoshi" %% "scala-fixture" % "0.1.0"
使い方はscalikejdbc-fixtureとだいたい同じ。Ups, Downs と書いてたのが、SetUp,TearDownで動くようにしてます。(念のため?Ups, Downsでも動くようにしてます)
#!SetUp INSERT INTO users(id, name) VALUES (1, 'user1'); #!TearDown DELETE FROM users WHERE id = 1;
あと、1000件くらいINSERTしてやるぜ!ランダムなデータ突っ込むぜ!みたいなときのためにScalaのコードでもかけるようにしました。
import java.sql.Connection import com.github.tototoshi.fixture.FixtureScript class MyFixtureScript extends FixtureScript { override def setUp(connection: Connection): Unit = { connection.prepareStatement("insert into users(id, name) values (3, 'user3')").execute() } override def tearDown(connection: Connection): Unit = { connection.prepareStatement("delete from users where id = 3").execute() } }
テストコードはこんなかんじになります。 beforeでsetUp, afterでtearDownすると良いでしょう。 詳しくはREADMEを読んでください。
import org.scalatest.{ BeforeAndAfter, FunSuite } import com.github.tototoshi.fixture._ class FixtureTest extends FunSuite with BeforeAndAfter { val driver = "org.h2.Driver" val url = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1" val username = "sa" val password = "" val fixture = Fixture(driver, url, username, password) .scriptLocation("db/fixtures/default") .scriptPackage("com.example.fixtures") .scripts(Seq("script1.sql", "script2.sql", "MyFixtureScript")) before { fixture.setUp() } after { fixture.tearDown() } test("load fixtures") { // write tests } }