JDBC ドライバーを介して MSSQL サーバーを使用する Java アプリケーションがあります。テストに使用できるスタブはありますか? たとえば、アプリケーションが接続エラー、SQL サーバーのディスク不足、およびその他の例外のケースをどのように処理するかをテストしたいと考えています。これを実際の SQL サーバーでシミュレートするのはかなり難しく複雑です。
ありがとう
JDBC ドライバーを介して MSSQL サーバーを使用する Java アプリケーションがあります。テストに使用できるスタブはありますか? たとえば、アプリケーションが接続エラー、SQL サーバーのディスク不足、およびその他の例外のケースをどのように処理するかをテストしたいと考えています。これを実際の SQL サーバーでシミュレートするのはかなり難しく複雑です。
ありがとう
(システムがこれを簡単にするように設計されていると仮定して)DBアクセスクラスの独自のバージョンを作成できます(ステートメント/準備済みステートメントインターフェイスを使用していると仮定します)。これは実際のDB呼び出しを保持し、変更できますあなたが望むことを正確に行うために。
私はこれをやりました - 本当に退屈な仕事で1日かそこらかかります.
https://mocquer.dev.java.net/などのモック ライブラリを使用して、DAOモック オブジェクトを返す s またはリポジトリに対して単体テストを作成できます。Connection
ただし、これを正しく機能させ、実際のテスト範囲を提供するには、非常にクリーンで分離されたアプリケーション アーキテクチャが必要です。
MS-SQL 以外のものを使用すると、非互換性や機能 (トランザクションなど) の不足により、解決するよりも多くのテストの問題が発生する可能性があります。だから私はカールと一緒です - シムを使ってください。
通常の動作の単体テスト カバレッジを探している場合は、別の考え方をするかもしれません。
私はそれらを個人的に使用したことはありませんが、あなたが話していることは、Mockito ( docs ) や PowerMock などのモック フレームワークに非常に適しているように思えます。それらは、あなたが求めている種類の障害注入を適切にサポートしているようです。それらのいずれか (または同様の) の経験がある人は、検討することができますか? Java 5 と 6 の両方で動作するように JDBC ResultSet をスタブ/モック化する方法も参照してください。
私が考えたオプションで自分自身に答えて、あなたの意見を聞いてうれしいです. あちこち歩き回った後、Java で実装されたデータベースであるHyperSQLDBにたどり着きました。HSQLDB のソース コードに別のレイヤーを追加して、それを制御し、事前に定義された動作を挿入できるようにすることは、どの程度実現可能だと思いますか。たとえば、すべてのクエリをゆっくり実行したり、切断したりします。
このアイデアは追求する価値があると思いますか? 合理的な時間内に実行可能ですか?
プロシージャを実行するsp_who2と、現在のすべての接続が生成され、db で処理されます。各 db 接続に対応する spid という名前の列が表示されます。次を入力して実行するだけkill <<spid>>で、ユーザーを終了できます.. ただし、spid が 50 未満の場合、それはシステム プロセスであり、強制終了しないことを意味します。これは、接続の切断を再現するのに役立ちます。ALTER DATABASE dbname SET SINGLE_USER WITH ROLLBACK_IMMEDIATEこれにより、前述のデータベースへのすべての接続がすぐにドロップされるとも言えます。
Select @@MAX_Connections as Max_Connectionsデータベースに対して確立できる最大接続数を示します (接続が利用できないことをテストするために、低い数に設定できます)。
クエリのタイムアウトを複製するには、クエリのタイムアウトを非常に低い数値に設定し、かなり大きなクエリを実行します。
ディスク容量エラーを作成するには、単に db ファイルのサイズを小さくし、大きくならないようにします...その後、データベースにデータを挿入します (例外が発生します)。
altert database xxx (file= maxsize= filegrowth=)