【JUnit】 AssertJ / AssertJ-DB ~ 基本編 [1] / DBデータの比較について ~

■ はじめに

https://blogs.yahoo.co.jp/dk521123/36157721.html
の続き。
今回は、時間以外のDBデータの比較について扱う。

なお、時間に関する比較は、以下の関連記事を参照。
AssertJ / AssertJ-DB ~ 基本編 [3] / 時間に関する比較 ~
https://blogs.yahoo.co.jp/dk521123/37145996.html

■ 比較について

 (知ってる限りだと)大きく分けて以下の2点。

【1】テーブル・インスタンスを取得して比較する
【2】DBの変更に関わるインスタンスを取得して比較する

【1】テーブル・インスタンスを取得して比較する

 * テーブルのインスタンスを取得して、比較することもできる

構文

Source source = new Source("jdbc:mysql://【DB Host】:【ポート】/【DB名】", "【ID】", "【パスワード】");
Table table = new Table(source, "【テーブル名】");

assertThat(table).row(【行(0~)】).value("【項目1】").isEqualTo(【期待値1】);
assertThat(table).row(【行(0~)】).value("【項目2】").isEqualTo(【期待値2】);
assertThat(table).row(【行(0~)】).value("【項目3】").isEqualTo(【期待値3】);
詳細なサンプルは、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/36164701.html

【2】DBの変更に関わるインスタンスを取得して比較する

http://joel-costigliola.github.io/assertj/assertj-db-concepts.html#changes
の図が分かりやすいかも。

構文

Source source = new Source("jdbc:mysql://【DB Host】:【ポート】/【DB名】", "【ID】", "【パスワード】");

// DB変更を追跡するための Changesインスタンス
Changes changes = new Changes(source);

// スタートポイント(変更前の状態を記憶)
changes.setStartPointNow();

// テスト対象メソッド実行...
// ... 略 ...

// エンドポイント(変更後の状態を記憶)
changes.setEndPointNow();

// 項目を明示的に指定して比較可能
assertThat(changes)
    .hasNumberOfChanges(【変更したレコード数】)
    .changeOnTable("【テーブル名】")
    .isCreation() // isDeletion() / isModification()
    .rowAtEndPoint()
    .value("【項目1】").isEqualTo("【期待値1】")
    .value("【項目2】").isEqualTo("【期待値2】")
    .value("【項目3】").isEqualTo("【期待値3】");

// assertThat(changes)
//    .hasNumberOfChanges(1)
//    .changeOnTable("person")
//    .isCreation() // isDeletion() / isModification()
//    .rowAtEndPoint()
//    .value("id").isEqualTo(1L)
//    .value("name").isEqualTo("John")
//    .value("birthdate").isEqualTo(DateValue.of(2001, 1, 21));
詳細なサンプルは、以下の関連記事を参照のこと。
https://blogs.yahoo.co.jp/dk521123/36157721.html


関連記事

AssertJ / AssertJ-DB ~ 入門編 ~

https://blogs.yahoo.co.jp/dk521123/36157721.html

AssertJ / AssertJ-DB ~ 基本編 [3] / 時間に関する比較 ~

https://blogs.yahoo.co.jp/dk521123/37145996.html