0

JPAを使用してデータベース操作を行うJavaコードを書いています。つまり、getTransaction、getResultList、setFirstResult、setMaxResults、begin、commit、flush、clear、...

私の質問は、コードを try catch ブロックでラップできても、コードが機能するかどうかをテストするために例外を生成する方法が必要だということです。

例外処理をテストするために、データベース エラーをどのように生成しますか? プログラムの実行と同時にJava外のDBで実行するいくつかのSQLコマンドは? 私のターゲット DB は SQL Server 2008 R2 です。

ロックや「StaleObjectStateException:Row was updated or deleted by another...」などの一般的なエラーの例を教えてください。

ありがとうございました!

4

2 に答える 2

1

次のStaleObjectStateSessionようなJUnitテストケースを書くことができます

e1 = session1.load(key);
e2 = session2.load(key);
e2.modifyAnything();
e2.update();
e2.commit();
e1.modifyAnything();
e1.update();

次に、例外を取得します。ちなみに、これStaleObjectStateSessionは Hibernate の例外であり、データベースの例外ではありません。

実際のデータベース例外をテストするために、データベースの制約に違反する可能性があります。たとえば、データベースで NOT NULL として宣言されている列に、すでに存在する主キーまたは null 値を持つ行を挿入する JUnit ケースを記述します。

テストを 1 回だけ行い、JUnit テスト ケースを作成する手間を省きたい場合は、Eclipse のデバッグと SQL 操作を使用して実行できます。

コード内のレコードのロードとコミットの間にブレークポイントを設定します。ブレークポイントに到達すると、SQL でこのレコードを手動で削除しDELETE FROM table WHERE primary_key =...、実行を続行する前にこの変更をコミットします。(または、行を更新することもできますがUPDATE、バージョン列も更新することを忘れないでください。) 次に、Eclipse でプログラムの実行を続行します。

もう 1 つのアイデアは、一時的に NULL 可能な列を NULL 以外にすることALTER TABLE table MODIFY(column ... NOT NULL)です。テストの後、この変更を元に戻す必要があります。確かに、このようなテストは、本番システムではなく、専用のテスト データベースでのみ実行する必要があります。

于 2013-04-26T09:58:12.127 に答える
0

インターフェイス ベースの DAO をモックして、必要な例外を作成します。

インターフェイスベースの DAO を書いていますね。

発生する可能性のある例外的な状況ごとに単体テストを試みることが実用的かどうかはわかりません。

于 2013-04-26T01:04:56.363 に答える