5

JDBC ドライバーを介して MSSQL サーバーを使用する Java アプリケーションがあります。テストに使用できるスタブはありますか? たとえば、アプリケーションが接続エラー、SQL サーバーのディスク不足、およびその他の例外のケースをどのように処理するかをテストしたいと考えています。これを実際の SQL サーバーでシミュレートするのはかなり難しく複雑です。

ありがとう

4

6 に答える 6

1

(システムがこれを簡単にするように設計されていると仮定して)DBアクセスクラスの独自のバージョンを作成できます(ステートメント/準備済みステートメントインターフェイスを使用していると仮定します)。これは実際のDB呼び出しを保持し、変更できますあなたが望むことを正確に行うために。

私はこれをやりました - 本当に退屈な仕事で1日かそこらかかります.

于 2011-07-05T01:04:19.483 に答える
1

なんてことはないと思います。
独自のデータベースをセットアップし、マシン/LAN でテストする方がよいでしょう。

私が知っているのは、次のことだけです。

どちらも MySQL をサポートしていますが、MS-SQL はサポートしていません。それはライセンスの問題と制限に関係していると思います。そのため、MS-SQL db 用の同様のサービスが見つからないことを残念に思います。

于 2011-07-05T01:18:51.667 に答える
1

https://mocquer.dev.java.net/などのモック ライブラリを使用して、DAOモック オブジェクトを返す s またはリポジトリに対して単体テストを作成できます。Connection

ただし、これを正しく機能させ、実際のテスト範囲を提供するには、非常にクリーンで分離されたアプリケーション アーキテクチャが必要です。

于 2011-02-14T08:13:17.080 に答える
0

MS-SQL 以外のものを使用すると、非互換性や機能 (トランザクションなど) の不足により、解決するよりも多くのテストの問題が発生する可能性があります。だから私はカールと一緒です - シムを使ってください。

通常の動作の単体テスト カバレッジを探している場合は、別の考え方をするかもしれません。

私はそれらを個人的に使用したことはありませんが、あなたが話していることは、Mockito ( docs ) や PowerMock などのモック フレームワークに非常に適しているように思えます。それらは、あなたが求めている種類の障害注入を適切にサポートしているようです。それらのいずれか (または同様の) の経験がある人は、検討することができますか? Java 5 と 6 の両方で動作するように JDBC ResultSet をスタブ/モック化する方法も参照してください。

于 2011-07-06T01:46:53.920 に答える
0

私が考えたオプションで自分自身に答えて、あなたの意見を聞いてうれしいです. あちこち歩き回った後、Java で実装されたデータベースであるHyperSQLDBにたどり着きました。HSQLDB のソース コードに別のレイヤーを追加して、それを制御し、事前に定義された動作を挿入できるようにすることは、どの程度実現可能だと思いますか。たとえば、すべてのクエリをゆっくり実行したり、切断したりします。

このアイデアは追求する価値があると思いますか? 合理的な時間内に実行可能ですか?

于 2011-07-05T20:11:06.047 に答える
0

プロシージャを実行する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=)

于 2011-07-06T18:32:14.227 に答える