2

こんにちは、dbunit のデータセットの問題または検証に直面しました。私がそのようなテーブルを持っていると想像してみましょう

//initial-dataset.xml
<dataset>
      <user id="1"  ...other fields />
      <user id="3" ...other fields />
      <user id="4" ...other fields />
      <user id="2" ...other fields />
</dataset>

そして、私はそのようなテストクラスを持っています:

@DatabaseSetup("initial-dataset.xml")
public class UserTest {
    //tests for find operations

    @Test
    @ExpectedDatabase("expected-data.xml")
    public void testCreateUser() {
        // test for create
    }
}

新しいフィールドがデータベースに追加されたことを確認したいのですinitial-dataset.xmlが、expected-dataset.xml.

追加しようとしましDatabaseAssertionMode.NON_STRICTたが、この属性 dbunit を使用しても、予想されるデータセットに実際のデータベースとまったく同じ数または User テーブルの行が含まれていることが確認されます。

@DatabaseSetup別の解決策は、作成操作のためにそのような xml を追加することです。

<dataset>
    <user />
</dataset>

userこの場合、dbunit はテストを実行する前にテーブルからすべてをクリーンアップします。この場合expected-data.xml、テスト実行の結果のみを含める必要があります。ただし、この場合、実際のシナリオで発生するさまざまなコーナー ケースを検証することは困難です。

別の解決策は unitils (dbunit の下のある種のラッパー) を使用することですが、このライブラリには @Dataset と @ExpectedDataset の本当に奇妙な概念があります

私の懸念は、たとえば、別の開発者がsmthを変更したり、新しいエントリを追加したりして、initial-dataset.xmlすべての期待されるデータセットをこの新しいフィールドで更新する必要があることです。

4

0 に答える 0