2011-07-12 13 views
6

.net mvcコントローラ/アクションをどのように機能テストしますか。.net MVC機能テスト

私はちょうど私が.net mvcでハッキングしているライブへのRailsの開発から何年も来た。それは痛いですが、私はこれの大部分が学習曲線に過ぎないことを期待しています。

すぐにわからないのは、.NETの世界でのRailsの機能テストと統合テストのためのアナログです。 Railsは機能テストを非常に明快でシンプルにしているので、カバレッジを取る時間を取らないようにするのは愚かなことです。 .NETを使用すると、私はまだGoogleに価値のあるような単一の結果を得ることはできません。私はそれが私の初期の.netステータスであることを願っています。それは、正しい検索条件を入力したり、いくつかのパラダイムを失ったりしないようにしています。

HELP!

+0

コントローラアクションは単なる方法であり、そのようにテストすることができます(アイソレーションのために擬似/モックを使用して)。各条件のアレンジ、アクト、アサートのパターンより機能テストに特化したことはありますか?アプリケーションの分離とテストを防ぐクラスの具体的なインスタンスを提供していますか? – StuperUser

+2

理由の一部は用語です。 Railsの世界では、機能テストについて話していますが、コントローラの単体テストを意味します。私が見たことから、ほとんどのRailsプログラマーは、真のユニットテスト(テストコードのみ)と機能テスト(データベースなどの外部依存関係を含む)を混在させています。 .NETコミュニティは、それをより密接に追いかけるようです。ロイOsheroveは、.NETでのテストに関するまともな本を持っています。http://artofunittesting.com/ –

答えて

0

標準の「ユニット」テストとは対照的に、本当に機能をテストしたい場合は、いくつかの選択肢があります。

  1. より多くの機能ベースのテストを設定するには、MSテストを使用してください。
  2. (specFlowを?)フレームワークのBDDタイプを使用する
  3. あなたがより自動化UATに向けた機能試験を目指している場合、あなたはまた、FITなどのアイテムを持っているセレン

のように、より多くの機能テストフレームワークを使用しますフレームワーク(およびFitnesse)。

これらは、Railsのツールとフレームワークと直接類似していますか?いいえ、.NETはRailsではありません。

+0

右はそれがリンゴとオレンジであることを理解する。実際の質問には、「MVCコントローラ/アクションを機能的にテストするための適切な方法は何ですか?」と書かれているはずです。所定のパターンがあるかどうか、またはそれがオープンエンドであるかどうかはわかりませんでした。私は.NETのnoob機能テストの初心者ガイドを探していると思います。 – Cory

+0

@Cory、「ユニットテスト」と「機能テスト」の用語に関するオリジナル記事のコメントを参照してください。私も本をお勧めします:) –

+0

@Wizard - 区別に同意しました。ポインタのおかげで。 – Cory

3

私はRailsについての知識が不足していること、そしてあなたがすでにレールについて知っていることを教えてくれていることを私に許していますが、他のユーザーのために比較する形式にしたいと考えています。

Railsには、Unit、Functional、Integrationの3種類のテストがあります。

ユニットテストは、このパラダイムは、レールに初めから教えられているように見えるコントローラのアクション

との間の流れをテストするために、あなたのコントローラの

統合テストを、あなたのモデル

機能テストをテストします。

しかし、.NET MVCの世界では、テスト方法はRailsのようにレイアウトされていません。

多くの開発者は、レール上のモデルに単体テストを書く方法でコントローラに単体テストを書きます。あなたは基本的にメソッド(Controller Action)を呼び出し、そのメソッドからオブジェクトを取得します。それからあなたが期待する値を持っていると主張することができます。これを行うには、あまりにも多くのごまかし(HttpContextなど)をモックする必要があるので、お尻の痛みです。さらに、機能テストではありません。アプリケーションの機能をテストするのではなく、1つのメソッドだけをテストしています。

あなたのコントローラに単体テストを書いているわけではありません。あなたは実際にWebリクエストをしており、Webレスポンスを得ています。ステータスコード、クッキーなどを確認することができます。エンドからエンドまでシステムをテストしています。

これを行うにはいくつかの方法があります。NET MVC

1)これを手助けする小さなツールがSteven Sandersonにあります。

http://blog.stevensanderson.com/2009/06/11/integration-testing-your-aspnet-mvc-application/

私が最初にこれを見て、私はそれは素晴らしいと思いましたが、私が問題に遭遇し、それを使用し始めました。

2)RestSharp + NUnit - これは、この種のテストを行うための私の現在の好みです。これにより、Webリクエストをまとめてレスポンスを得ることができます。いくつかの一般的な方法では、restsharpでかなり速く動くことができます。 NUnitは必要なアサーションを提供します。私はローカルIISサーバーに対して要求を行い、応答で期待しているさまざまな項目をアサートします。あなたは実際にどのモデルがビューに割り当てられているかをテストすることはできませんが、それは私の問題ではありません。

RSpecに慣れていれば、同様のSpecFlowを得ることができます。

Railsはテストをフレームワークに組み込み、市民一人物です。 .NET MVCではあまりにも悪いです。

希望に役立ちます。

0

ユニットテストMVCアプリケーションの最善の方法は、新しいユニットテストプロジェクトをソリューション内に追加することです。プロジェクトソリューションを右クリックし、追加をクリックしてから、追加 - >テストプロジェクトをクリックします。

[TestMethod]属性を持つメソッドを持つテストクラスが表示されます。これらの方法でユニットテストロジックを作成します。

ユニットテストが実行されるMVCプロジェクトの新しい参照.dllをテストプロジェクトの中に追加します。これにより、テストプロジェクトはメインプロジェクトの実際のコントローラアクションを検出できます。

System.Web.MVC名前空間への参照を追加します。

以下の試験方法のサンプルを参照してください:体系

[TestMethod] 
public void DisplayCustomer() 
{ 
    CustomerController obj = new CustomerController(); 
    var testResult = obj.DisplayCustomer(); 
    Assert.AreEqual("DisplayCustomer",testResult.ViewName); 
} 
とパスを参照するプロジェクトを実行します/ テストにテストを失敗し、このことができますウィンドウ

希望結果!

ありがとうございました。