2017-11-06 9 views
0

シンプルなHTTPメソッドを使用してC#でバックエンドを作成しました。取得、ポスト(作成)、プット(更新)、削除。NUnitでコントローラのHTTPメソッドをテストする必要があります

今、私はNUnitでいくつかの単体テストを実装したいと思います。私はthis articleを見つけました。ここではNUnitの基礎が説明されています。しかし今、問題は、これを使って単体テストを作成する方法です。

コントローラーのHTTPメソッドをテストするために何をすればいいのか誰でも説明できますか?事前に

感謝:)

EDIT:

物事を明確にするには、私はその可能ならば、取得するには、テストの作成、更新、私のコントローラクラス以上のアイテムを削除したいです。あなたはASP.NET MVCを使用している、あなたはこのような何かできると仮定すると、

+0

質問に答えるのが難しいと思わないでください。テストプロジェクトにNunitのフレームワークを "インストール"しましたか?コントローラー内のどのようなコードですか?コードを見ることなく、どのようにテストしたいかを言うことは不可能です。 – Fabio

+0

何を試しましたか?そして何が問題なのですか?おそらく間違ったことを試そうとしていますか?コントローラをテストするのはとても簡単です。 ASP.NETスタック全体を設定する必要はありません。コントローラのインスタンスを作成し、コンストラクタ内の依存関係を渡して、実際のパラメータを使用してアクションメソッドを呼び出してください。 –

+0

*テストしようとしているのは何ですか? * Controller *は、HTTP動詞のフィルタリングまたはルーティングを行いません。 Verendusによって投稿された答えは、方法をテストすることがどれほど簡単かを示しています。 –

答えて

1

から取ら

public class ProductController : Controller 
{ 
     public ActionResult Index() 
     { 
      // Add action logic here 
      throw new NotImplementedException(); 
     } 

     public ActionResult Details(int Id) 
     { 

      return View("Details"); 
     } 
} 


[TestFixture] 
public class ProductControllerTest 
{ 
     [Test] 
     public void TestDetailsView() 
     { 
      var controller = new ProductController(); 
      var result = controller.Details(2) as ViewResult; 
      Assert.AreEqual("Details", result.ViewName); 

     } 
} 

例を私は彼らのように、コントローラ自体は非常にロジックを置くことを避ける傾向にあります(今見ているように)テストするのは簡単ではありません。

代わりに、必要なビジネスロジックを実行し、それをテストするサービスレイヤーを追加します。そうすれば、ロジックはMVC以外の状況でも再利用できます。あなたはおそらく、本当にユニットテストにそれを必要とすることなく、夜に眠るために管理することができます軽いですが、SomeServiceを完全にすることができ

//Controller action 
IHttpResult DoSomething(string input) 
{ 
    var model = SomeService.DoThings(input); 
    return View("~/views/DoSomethingView.cshtml", model); 
} 

この方法、あなたのコントローラのアクションは次のようにすることができますユニットは簡単にテストされます。

+0

ビューに関連するロジックを表示しない限り、 – Fabio

+0

あなたの提案をお寄せいただきありがとうございます。実際にはいくつかの要件がありますが、私はサービスレイヤーを作成できません。 –

+0

逆に、テスト容易性はコントローラを使用する大きな利点の1つです。 ASP.NETスタック全体を設定する代わりに、Controllerインスタンスを作成してそのメソッドを呼び出すだけです。サービス・レイヤーは、ビジネス・ロジックを要求処理から分離するために使用されます。コントローラー内のハードコーディング、またはサービス内のハードコード*データベース接続*をテストすることはできません。それはコントローラのものでもサービスの欠陥でもない –

関連する問題