Spring Boot/開発/テスト/テストデータ/DbSetup

Spring Boot/開発/テスト/テストデータ/DbSetup

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 されてしまい、ロールバックしない。そういう思想で作られている。

java/spring/spring_boot/dev/test/test_data/dbsetup.txt · 最終更新: 2019-07-02 10:27 by ore