0

私たちは現在、JMS を使用してメッセージを受信し、メッセージを永続化し、別のクラスを使用して結果を送信するシステムで、JTA の失敗動作をテストする作業を行っています。

Spring を使用して全体を結び付けます。現在の単体テストでは、トランザクション管理に HSQLDB、Apache ActiveMQ、および Bitronix を使用しています。主に HSQLDB が XA トランザクションを実装していないため、これでの成功は限られています。

ここで質問があります: トランザクション ユニット テストでデータベースの障害を最適にシミュレートするにはどうすればよいでしょうか? テストの途中で標準の JDBC ドライバー (たとえば、Oracle 用) を失敗させる方法はありますか?

nb電源ボタンを押すことは、繰り返し可能なテストではありません:)

4

2 に答える 2

3

テストする内容を正確に決定する必要があります。たとえば、OracleがBitronixを使用したXAトランザクションでどのように動作するかをテストする場合、duffymoが提案するようにDAOをモックすることは役に立ちません。このような場合、トランザクションの途中で接続を切断する方法を見つけてから、Bitronix / Oracleがリカバリをどのように処理するかを確認する必要があります(ヒューリスティックな結果など)。

かなりの数の場合、実際にXAトランザクションを使用せずに同じ機能を取得する方法があることに注意してください。それは、より単純で、より速く、よりテスト可能である可能性があります。たとえば、メッセージがデータベースで実行されるMOMおよびDMLから消費される非常に一般的なケースでは、2つのリソースマネージャーが更新されている場合でも、XAなしで回避する方法の一般的なパターンがあります。

于 2009-12-06T18:06:11.440 に答える
1

実装がトランザクションの途中で例外をスローするテスト用のモック オブジェクトを作成します。

Spring を使用しているため、反復可能で予測可能な方法で動作する DAO インターフェースの新しいテストのみの実装を作成するのは簡単なことです。テストのためだけに「wonky DAO」を注入します。

もちろん、XA ドライバーを使用してデータベースに接続しています。そうしないと、2 フェーズ コミットは機能しません。

于 2009-12-06T17:49:06.210 に答える