5

@DatabaseSetup アノテーションを使用して挿入したレコードのみを削除しようとしています。

私のテストは次のようになります。

@Test
@DatabaseSetup("classpath:data-set.xml")
@DatabaseTearDown(value={"classpath:data-set.xml"}, type= DatabaseOperation.DELETE)
public void testSomething() throws Exception {

データセット.xml

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1" name="Joe"/>
</dataset>

おそらく、DatabaseOperation.DELETE を使用すると、「データセットの行に一致するデータベース テーブルの行を削除する」ことを意味します。しかし、テストを実行すると、テーブル内のすべてのデータが消去されます。

問題は、ティアダウンに使用されるxmlファイルのフォーマットだと思います。さまざまな形式を使用してみました:

まず、tear-down.xml で試してください

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person id="1"/>
</dataset>

Tear-down.xml で 2 回目の試行

<?xml version="1.0" encoding="UTF-8"?>
<dataset>
    <person/>
</dataset>

また、使用する形式に関係なく、テーブル内のすべてのデータが常に削除されます。単純にテーブル名をリストしていない、ティアダウンに使用される形式の例が 1 つも見つかりません。ほとんどの例では、セットアップと破棄の両方に同じ xml ファイルを使用しているようです。

しかし、これは可能でなければなりませんね?

4

1 に答える 1

7

データベースに挿入されたレコードは、@DatabaseTearDownアノテーションではなく によって削除され@DatabaseSetupます。その理由は、デフォルトで DbUnit がテーブルをクリーンアップし、その後テスト レコードを挿入するためです。を使用することでこれを防ぐことができますDatabaseOperation.INSERT

于 2014-12-09T14:25:51.813 に答える