2

Grails アプリケーションの統合テストを実行しています。easybプラグインを使用しています。問題は、シナリオ間でデータベースがクリアされないように見えることです。標準の Grails 統合テストを実行すると、各テスト間で永続化コンテキストがクリアされます。easyb Stories は Integration フォルダーにありますが、Grails Integration Test のルールはここでは適用されないようです... では、easyb をクリーンアップするにはどうすればよいでしょうか?

PS 私は同じ groovy ファイル fwiw で複数のシナリオを定義していますが、これが必ずしも適切であるとは思いません。

4

2 に答える 2

0

私のような人がまだこの問題に対処しており、各テスト シナリオの後にロールバックする方法を探している場合に備えて、以下に有効な解決策を示します (Burt Beckwith のブログに感謝します)。

各 easyb テスト シナリオを with transaction ブロックでラップし、最後に手動でロールバックします。

scenario "add person should be successful", {
Person.withTransaction { status -> 
    given "no people in database", {
    }
    when "I add a person", {
        Person.build()
    }
    then "the number of people in database is one", {
        Person.list().size().shouldEqual 1
    }
    status.setRollbackOnly()
}
}

scenario "database rollback should be successful", {
given "the previous test created a person", {
}
when "queried for people", {
    people = Person.list().size()
}
then "the number of people should be zero", {
    people.shouldEqual 0
}
}

上記のテストはパスします。問題のより良い解決策があれば投稿してください

于 2011-11-14T22:45:35.083 に答える
0

1 つの可能性は、トランザクションを使用することです。私はJavaでこのテクニックを使用しています。トランザクション アノテーションでテストをマークします。テストの後、データベースの変更をロールバックします。

次の可能性は、シナリオセクションの後で SQL クリーンアップ クエリを実行することです。

于 2010-08-19T19:22:11.940 に答える