Hibernateを使用するSpring3.2アプリケーションと、いくつかのJUnit4テストケースがあります。私はデータベースとしてMySQL5を使用しています。
ロールバックするDAOクラスのテストケースを作成する場合、テストケースは合格です。ただし、テストケースにロールバックしないように指示すると(@Rollback(false))、テストケースは失敗します。このため、defaultRollback=trueの場合に合格するテストケースの有効性を信頼していません。
問題のテストケースは、[Team]オブジェクトが多数あるオブジェクト[Company]を削除する場合です。[Team]オブジェクトには、多くの子[Team]オブジェクトを含めることもできます。
[Company]を削除すると、削除がオブジェクトにカスケードされます。[Team]オブジェクトを削除するときに、削除を子[Team]オブジェクトにカスケードするように指定しなかったため、MySQLによって外部キー制約違反の例外がスローされます。テストケース(ロールバックするように設定されている場合)は合格です!しかし、それは確かにすべきではありませんか?テストケースでロールバックをfalseに設定すると、失敗し、MySQLの制約違反の例外についてうめき声を上げます。
何かアドバイスはありますか?@Rollbackがtrueに設定されてからfalseに設定されている場合、テストケースの応答が異なるのはなぜですか?