私はDBと通信するC#アプリケーションを持っています。私はDBに依存するいくつかの関数をテストしたい。だから私はDBが各テストの実行の前に初期状態を持っていることを確認したい。私はNUnitを使ってアプリケーションをテストします。 DBの初期状態を復元するにはどのような手段がありますか?
ありがとうございました!ユニットテストデータベースに依存する動作C#
答えて
メモリ内のSQLiteデータベースを使用して、テストDB環境を作成することができます。
Rhino mocksまたは moq
これらのプログラムは、テスト中にデータベースなどのデータソースをシミュレートすることができます。
SQLite Nunit & Fluent Nhibernate - Test your data access layer
あなたのようなモックアッププログラム(プラグイン)を使用する必要があります。
データベースとの対話テストは行わないでください。このタイプのテストは、統合テストと呼ばれます。これには通常のテストツール(NUnit、MSTestなど)を使用できますが、統合テストを別のプロジェクトに分け、専用のテストデータベースを使用し、トランザクション内でこれらのテストを実行するのが最も良い方法です(たとえば、TransactionScopeを使用してください)。あなたはロールバックします。これにより、データが変更されず、テストの動作が予測可能になります。これは非常に重要です。
可能であれば、データベースなどの外部ソースをすべて偽装して(通常はより高速な)単体テストを実行できるようにアプリケーションを設計してください。しかし、これは簡単ではありません。特に、テスト容易性のために設計されていない既存のアプリケーションを扱う場合。このシナリオでは、統合テストを開始するのがよい方法を見つけました。
これは最も実用的な答えです! – vinayan
他の人は言っているように、あなたはDBに依存してはならず、ユニットテストの構造です。 したがって、私はそれを使用するコンポーネント(別名DB抽象化レイヤー)からDBを隠し、ユニットテストのためにインメモリDBを実装するInterfaceを作成します。
このインメモリDBのテーブルは、各DBテーブルの単純なC#HashTableを使用して実装できます。
このセパレーションは、使用するコンポーネントから変更される可能性のあるDB(MySQLからOracleなどへの移動など)間でコード内に分離を作成するメリットもあります。
のテストでMbUnitに切り替えることを検討してください。それは非常に便利ですロールバックあなたのニーズに合わせて正確に属性。
MbUnitには、NUnitのテストクラスとメソッドのマーキングと同じ属性があります。したがって、使用するディレクティブを変更し、MbUnit dllを参照するだけで済みます。
- 1. ユニットテストデータベースのコード
- 2. C#のサブクラスに依存する動的な戻り値の型?
- 3. FileDownloader - ブラウザに依存する異なる動作
- 4. 依存グラフプラグインジェンキンが動作しない
- 5. C++循環依存
- 6. ナノサーバーC#アプリ依存
- 7. セルゴリータスク使用ユニットテストデータベース内でdjango ormを作成する
- 8. Makefileに依存ファイルを作成する
- 9. スタティックライブラリに依存するポッドの作成
- 10. 動的依存ドロップダウン
- 11. Djangoは他のページ/動作に依存してテストします
- 12. WPFの動作に依存プロパティを追加します。
- 13. C++の#include依存関係を自動的にソート
- 14. C#DLLの実行時に動的に依存関係を解決する
- 15. C言語に依存しないgotoxy()関数の作成
- 16. C#のSQL依存関係
- 17. ユニットテストC#MOQ依存注射
- 18. C依存Perlライブラリのデプロイ
- 19. C++ヘッダーの依存性
- 20. C++の依存コンボボックスQT4
- 21. C#のDLL依存関係
- 22. C++用のソースコード依存マネージャー
- 23. netbeans(c/C++プラグイン)でプロジェクトの依存関係を作成する方法
- 24. Macアドレス - C++ - プラットフォームに依存しない
- 25. PHPUnitの依存関係が正常に動作しない
- 26. Eclipse - jarsに依存するプロジェクトの作成 - ant中に作成
- 27. CMAKE:依存関係の依存関係を自動的に追加します
- 28. フラスコ動的依存ドロップダウンリスト
- 29. 依存ドロップダウンリスト - 自動ロード
- 30. ファイルシステムで動作するプラットフォームに依存しないライブラリファイルはありますか?
単体テストは通常、あなたのコードを孤立してテストすることを意味します... DBを模倣するのはどうですか? –
時々私はストアドプロシージャをテストする必要があるので、それを模擬する方法はありません。場合によっては、テストで多くのデータが必要になることがあります(任意ではありませんが、複雑に接続されています)。だから、dbで一度だけデータを準備し、それをいつも使うのは、偽のリポジトリよりもはるかに簡単です。 – StuffHappens
NUnitはユニットテストのためのユニットテストと統合テストを混在させているようです。 – weismat