0

Hibernateを使用するSpring3.2アプリケーションと、いくつかのJUnit4テストケースがあります。私はデータベースとしてMySQL5を使用しています。

ロールバックするDAOクラスのテストケースを作成する場合、テストケースは合格です。ただし、テストケースにロールバックしないように指示すると(@Rollback(false))、テストケースは失敗します。このため、defaultRollback=trueの場合に合格するテストケースの有効性を信頼していません。

問題のテストケースは、[Team]オブジェクトが多数あるオブジェクト[Company]を削除する場合です。[Team]オブジェクトには、多くの子[Team]オブジェクトを含めることもできます。

[Company]を削除すると、削除がオブジェクトにカスケードされます。[Team]オブジェクトを削除するときに、削除を子[Team]オブジェクトにカスケードするように指定しなかったため、MySQLによって外部キー制約違反の例外がスローされます。テストケース(ロールバックするように設定されている場合)は合格です!しかし、それは確かにすべきではありませんか?テストケースでロールバックをfalseに設定すると、失敗し、MySQLの制約違反の例外についてうめき声を上げます。

何かアドバイスはありますか?@Rollbackがtrueに設定されてからfalseに設定されている場合、テストケースの応答が異なるのはなぜですか?

4

1 に答える 1

0

フラッシュかフラッシュしないかの問題だと思います。変更は日付ベースに送信されないため、ロールバックモードで問題を隠すことができると思います。

これを公言するem.flush()には、ロールバックモードでのテストの最後に追加します。その後、問題が発生した場合は、それを修正できます。

于 2012-11-28T15:20:27.970 に答える