10

.NET DAL クラスの単体テストに満足できるオプションを探しています。これらは DAL クラスであるため、ADO.NET を使用してデータベースに直接アクセスします。現在、テストに MSSQL データベースのインスタンスを使用していますが、より高速なオプションがあるかどうか疑問に思っていました.--単体テストはできるだけ速く実行する必要があるため、インメモリ ソリューションが理想的です。

また、私は Microsoft プラットフォームしか使用しないため、TSQL に縛られていることも言及しておく必要があります。

4

6 に答える 6

3

あなたが述べているとすると:

また、Microsoftプラットフォームを使用するだけなので、TSQLに縛られていることにも言及する必要があります。

次に、SqlServerCompactEditionを使用するとニーズに合う場合があります。完全にメモリ内で動作するわけではありませんが、読み取り専用モードで動作できます(メインデータベースファイルが編集されないため、一度に複数のテストで使用できます)

いくつかの落とし穴があり、ストアドプロシージャはサポートされておらず、いくつかのデータ型を変換する必要があり、特定のデータ型には厳しい制限があります(特に、4000文字までしか使用できないvarchar)LinqtoSqlも適切にサポートされていません。

それにもかかわらず、私はSqlServer Compact Editionを、適切なSqlServerデータベースのほぼ完全なドロップ代替品として使用しました。

于 2009-01-27T11:22:48.323 に答える
2

SQLiteが最良の選択肢であることがわかりました。ただし、nHibernate を使用していますが、構成がゼロなので、セットアップに 1 秒しかかかりません。ただし、これらのタイプのエンジンには通常、必要となる可能性のあるものがいくつか欠けていることに注意する必要があります (たとえば、ADO プロバイダーを使用している場合、テーブル名にスペースがあると SQLite が爆発します)。

確かに、@TopBanana は、「実際の」データベースを使用しないことに関するいくつかの問題について正しいです。ただし、インメモリ RDBMS は、非常に迅速に実行したい種類のテスト (インクリメンタルまたは CI ビルドのチェックイン テストなど) に最適です。

もう 1 つの大きな利点は、セットアップや破棄について心配する必要がないことです。開発者 A が開発データベースを壊したためにチェックインが失敗するのは、非常に非生産的です ;-)

于 2009-01-27T18:55:38.237 に答える
1

Windows に RAM ディスクをマウントするソフトウェアがあると聞きました (URL を思い出せません、申し訳ありません)。

その上でテストデータベースを作成するのは興味深いかもしれません。

于 2009-01-27T13:06:36.960 に答える
1

SQL Serverは本当に単体テストのボトルネックですか?

つまり:

  1. 単体テストのプロファイルを作成しましたか (SQL プロファイラーなどを使用)。それらはすべて遅いですか?いくつかは遅いですか?なんで?
  2. 単体テストがやりすぎていませんか? セットアップとティアダウンのコードが重すぎませんか?
  3. SQL がボトルネックである場合、モックフレームワークを検討したことがありますか?そのため、すべての SQL 呼び出しをモックアウトします。
于 2009-01-27T11:39:04.390 に答える
1

オラクルでも同様の課題があり、次のことを行いました。

  • 実際の単体テストがデータベースに触れていないことを確認しましたが、代わりにサービスのモックを使用しました

  • 実際に Oracle を必要とするタグ付き DB テストと、HSQLDB、H2、またはその他のメモリ内データベースに対して実行できるテスト。したがって、それらを個別に実行できます。

  • Oracle の機能を実際に使用したテストでは、RAM ディスク上で実行される通常の Oracle インスタンスを使用しました。

これにより、テストが大幅に高速化されました。

于 2011-11-18T14:18:48.590 に答える
0

単体テストには本番用と同じデータベースを使用することをお勧めします。ライブの問題をデバッグしているときに、足を踏み入れるような奇妙な違いは本当に必要ありません。

NHibernate の非常に大きな単体テスト スイートを見ると、SQL Server (ディスク ベース) を使用しており、テストが驚くほど迅速に実行されることがわかります。単体テストの平均的なセットよりも多くのテーブルの作成/削除が行われていることを考えると、さらに印象的です。これは、SQL Server が最適化されているものではありません。

于 2009-01-27T11:41:54.603 に答える