2012-05-02 14 views
2

私はユニットテストの初心者です。私はasp.net mvc3とs#arp liteを使ってWebアプリケーションを持っています。このアプリケーションに単体テストを追加したいと思います。これまでは、コントローラークラスの各アクションについてテストしました。ちょうど好奇心が強い、私は他に何をテストする必要がありますか?ビューもテストする必要がありますか?私のASP.NET MVC3プロジェクトで何をテストする必要がありますか?

もう1つの質問ですが、私がオンラインで見つけたすべてのテスト例では、moqや他のツールを使用して偽のデータを作成しています。また、実際のデータベースを再度テストする必要がありますか?

答えて

5

ユニットテストビューも実際のデータベースも照会しないでください。コントローラーアクション、アクションフィルター、htmlヘルパー、モデル、C#で書かれたものなど、コードレベルの成果物に対して単体テストを使用します。

実際のデータベースとビューをテストする場合は、統合テストを参照してください。統合テストはユニットテストのようなものではありませんが、nunitのような単体テストフレームワークを使って実行することはできます。基本的には、Selenium WebDriverやWatinのようなものを使ってブラウザを動かすためのテストコードを書くだけです。しかし、これらは単体テストではなく、統合テスト、エンドツーエンドテスト、ユーザー受け入れテストです。

1

ビューにロジックがない場合、おそらく単体テストをテストする必要はありません。重要な基本シナリオをカバーするいくつかのエンドツーエンドテストを使用して単体テストを補完することができます。セレン。

はい、ユニットテストと並行してデータベースに移動する統合テストが必要です。

2

バグを含む可能性のあるものをテストします。ビューはテストするのがやや難しいですが、悪い考えではありません。詳細を探している場合は、カスタム属性、イベント、静的メソッド、拡張メソッド、その他のユーティリティをテストします。

データベースに対してテストを行っている場合は、それがテスト専用のデータベースであることを確認してください。多くのORMは、データベースを模擬する方法を提供します。

私は個人的にAyehde(www.ayende.com)製品のファンであり、私の模擬フレームワークとデータベースとしてRhino.MocksとRavenDBを使用しています。

1

フレームワークコードではなく、コードをテストしているので、定義すると、単位テストの対象はわかりません。あなたのコードが何をしているのかわからない。あなただけ。

ユニットテストフレームワークコードには何の意味もありません。既にテスト済みです。あなたのロジックをカバーするテストを書くことに集中する必要があります。

4

「テスト退屈するまで、」言われていること

、統合テストを経て、あなたのテストのほとんどを行うことの警戒します。 つまり、一度に1つずつテストします。 たとえば、あなたは、データベース

  • ロード方法
  • ビュー
  • ルーティングロジック
  • コントローラロジック
    • テストに興味があるかもしれませんが、同じ試験において、2以上をテストするものではありません。 。 コントローラのロジックをテストする場合、使用されているデータオブジェクトを渡すか、模擬してください。

      これらのパーツをテストする方法については、あなたも興味があります。私は、以下の3つの部分(データベース、ロード機能、ビュー)を取り上げる

      データベースあなたはそれが接続されているデータベース

      1. でテストする必要があります実際には2つのことがある

      2. それが接続用の正しい

      スキーマだが、私は、ザ・は、データベースのメタデータをテストするための多くの方法ですが、あなたが保存されている中で、バージョン番号を持っている場合、エコー検査

      Assert.AreEqual(42, QuerySingleResult("Select 42")); 
      

      を好みます、あなたは単にそれをテストすることができます。これにより、アップグレードパスも簡単になります。

      Assert.AreEqual(6, QuerySingleResult("Select version From Schema")); 
      

      ロード機能ロード機能をテストするための多くの方法があります

      は(私はここでは簡単なものを紹介します)しかし、彼らはすべての機能へのロードを分離するに依存します。

      テストLINQへ... は、あなたがこれが今テストしやすい2つの機能

      IEnumerable<People> LoadPeople() 
      { 
      return LoadPeople(new EntityFrameworkContext().People); 
      } 
      IEnumerable<People> LoadPeople(IEnumerable<People> fromPeople) 
      { 
      return From db in fromPeople Where ...... Select .... 
      
      } 
      

      にこれを分割する場合は、

      var people = From db in new EntityFrameworkContext().People Where ...... Select .... 
      

      があるとしましょう。

      ビュー

      ビューをテストするのは簡単ですが、多くの詳細があります。私は、あなたはすべてのためのビデオを参照します:http://www.youtube.com/watch?v=SttlPzwJw3U

      が、2つの重要な部分は

      1です)テスト

      MvcApprovals.VerifyMvcPage(new YourController().YourTestAction 
      

      2)コントローラ

      public ActionResult YourTestAction() 
      { 
          // setup your model 
          return View("viewpage", model); 
      } 
      
      でテストシーム

      ハッピーテスト!

  • 関連する問題