1

私は specflow を初めて使用し、コントローラーの依存関係をモックする方法について疑問があります。たとえば、コンストラクターでコントローラークラスに渡す UserRepository クラスに依存する UserController クラスがあります。Moqを使用して、次のようなことをしています:

var mock = new Mock<UserRepository>();
mock.Setup(m => m.ListAll()).Returns(new List<User>());
var browser = new IE(string.Format("http://localhost:4265/{0}",
username));

しかし、私のコントローラーはモックされたオブジェクトを使用していません。どうすればよいですか?

ありがとう

4

2 に答える 2

1

3つの(少なくとも)テストフレームワークを混合していますが、これはもちろんクールですが、おそらく停止して、何をテストするかを検討する必要があります。

Watinは、ブラウザインスタンスを制御するため、UIのテストに適しています。回帰テストを行うのが得意だと思いますhttp://en.wikipedia.org/wiki/Regression_testing

Specflowも素晴らしいです-個人的には、ビジネス開発者と(私たちの)ソフトウェア開発者の間のギャップを埋めるために使用するのが好きです。私たちが理解している(そしておそらく組織の他の部分も)用語で要件を実際に定義できるからです。炎上戦争を始めたいのですが、その真の価値に焦点を合わせない限り、解決するよりも多くの問題を引き起こす可能性があります。これは、サービスレイヤー(プレゼンテーションレイヤーのコントローラーの1つ下のレイヤー)をテストすることで機能します。実際には、データベース、外部サービス、ファイルシステムなどをモックするだけです。これにより、スペックフローテストはある種の統合テストになります。

Moqはモックフレームワークであり、もちろんあらゆる種類のテストで使用できます(私がやらせただけのように)が、これは単体テストに最適なツールです。

だからあなたの質問に戻ります。すべてのバグを見つけるために1つのテストを実行したい場合は、問題が発生します;)それは望ましくないことを私は知っています-それは私が行ったばかげた提案でした-しかし、実際には、統合テストを実行したいだけの場合( UIからいくつかのレイヤー/依存関係を介して実行されるテスト)現在のようにさまざまなテストフレームワークを簡単に組み合わせることができますが、なぜユーザーリポジトリをモックするのですか?それは、データベースにアクセスしたくないからですか?

とにかく、あなたが望むと思われる統合テストを行う1つの方法は、モックを使用するようにソリューションを構成することです-またはおそらくスタブが行います(テストしたいデータを返す偽のユーザーリポジトリを作成します)-あなたはUnity 、Ninject、構造マップなどの依存関係フレームワーク(使用するフレームワークについて戦争を始めないでください)と、Watinが使用しているテストURLを使用して、偽の/モックリポジトリを使用した構成を使用してサイトを起動します。

一方、コントローラーやサービスなどで単体テストを行うこともできます。TDDを試してみることもできますが、それはここでは取り上げられない別の章です。

于 2011-02-01T21:11:36.667 に答える
0

モックをコントローラーに挿入するために、モックで何もしていません。コントローラーを使用するには、ユーザー リポジトリを指定する必要があります。

また、より多くの回答を受け入れる必要があります。

于 2011-01-27T09:22:25.443 に答える