menu
書いてる野郎
orebike@gmail.com
DbSetup, from Ninja Squad このようなツールを使ってみる。
この DbSetup の思想は、どうせ専用のスキーマ用意して、専用の少量のそのテスト専用のデータを用意して、細かくテストするんだろと、だったら、DBは毎回全部まっさらにするし、テストデータもテストコードに直書きすればいいだろという話。
テストデータも Java で書くので、途中でコメントとか入れられるのが地味に便利
なので外部のファイルを読み込んだりトランザクション管理して終わった後にロールバックとかしない。 そういうやつ。
build.gradle に書き込む
dependencies { // 中略 testImplementation 'com.ninja-squad:DbSetup:2.1.0' }
DbSetup の思想通りにそのテストするメソッドにそのままズラズラ書く。
import javax.sql.DataSource; import static com.ninja_squad.dbsetup.Operations.*; //中略 @Autowired private DataSource dataSource; //中略 @Test public void hogeTest() throws Exception { Operation ops = Operations.sequenceOf( deleteAllFrom("hoge"), insertInto("customer") .withGeneratedValue("id", ValueGenerators.sequence().startingAt(1000L).incrementingBy(3)) .columns("name", "age") .values("yamada", 10) .values("tanaka", 20) .build()); DbSetup dbSetup = new DbSetup(new DataSourceDestination(dataSource), ops); dbSetup.launch(); //以下テストを書く }
このようなデータを想定して書いている
id | name | age |
---|---|---|
1000 | yamada | 10 |
1003 | tanaka | 20 |
dataSource は DI してもらっている。
このように設定すると、hoge テーブルが全削除された後、指定したデータ挿入されるので、それに対してテストすることになる。
ここで操作した値は commit されてしまい、ロールバックしない。そういう思想で作られている。