2

razor ビュー、c#、MVC3、.net 4.0 を使用してアプリケーションを開発しました。モックを作成せずにコントローラーを単体テストしたいと考えています。要件は次のとおりです。Repository メソッドを呼び出して実行する必要があり、データベースをテストに使用する必要があります。親切に、いくつかの解決策を提供してください。

4

3 に答える 3

3

単体テストでは、データベースやリモート サーバーへの接続などの外部リソースを使用しない傾向があります。それがモックの理由です。

そのようなリソースにアクセスするテストを行うと便利な場合があると思います。(しかし、それらを受け入れテストまたは統合テストと呼びましょう - それらと従来の単体テストを区別するためだけに)。

MBUnitテストフレームワーク( nUnitに非常に似ています)を見てください。これにより、データベースへのすべての変更を自動的にロールバックできます(データベースを元の状態に復元することはありません)。テストを実行するたびに「クリーン」状態になります)。詳細については、次のブログ記事をご覧ください: http://blog.benhall.me.uk/2008/01/mbunit-24-rollback-rollback2-and.html

他のアプローチは、特別なデータベースを用意してデータを生成することです。つまり、一連のテストが実行されるたびに、新しいユーザー ID 名などを生成します。このアプローチでは、データベースを時々クリーンにする必要がある場合があることに注意してください (名前などの一部の値で衝突が発生したり、一部のデータが既に入力されている db で一部のシナリオをテストできない場合もあります)。

どちらのアプローチも、db スキーマが変更されないことを前提としています。データベーススキーマが変更された場合 - とにかく何らかの作業が必要になります。

于 2012-09-06T06:35:08.200 に答える
0

この質問のポイントがわかりません。

1)それはあなたが話している統合テストであり、単体テストではありません。

2) "Visual Studio Unit Testing Framework" を実行する場合、いつでも TestMethod を記述して、モックを作成する代わりに実際のリポジトリを使用できます。モックを作成すると、リポジトリがモックに置き換えられるだけで、いつでも実際のリポジトリを使用できます。テストプロジェクトのアプリ構成自体などでdb接続文字列を構成する必要があるだけです...実際には、それがどのように設計されているかによって異なります。

3) IOC/DI について何も言及していないことに気付いたので、何も使用していないと思います。したがって、この質問です。IOC/DI を使用すると、テスト時に使用している実際のインスタンス (モックまたはリアル) をいつでも置き換えることができ、単一のエントリ/コード ポイントからオブジェクトを簡単に置き換えることができます。実際、テスト プロジェクトは、必要なすべての依存関係を設定できます。

4)MVCにはIDependencyResolverが付属していると思うので、それを検索してください。

5) IOC コンテナーは、テストを簡単にするだけです。私の 2 セントです。それ以外の場合は、手動で行います。

乾杯

于 2012-09-06T07:38:45.157 に答える