こんにちは、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
すべての期待されるデータセットをこの新しいフィールドで更新する必要があることです。