2012-01-25 18 views
0

APIへのAJAX呼び出しのテストケースを記述しようとしています。単純なWebリクエストとレスポンスを行う私の質問は、その対応に関するものです。レスポンスJSON値を引き出す簡単な方法はありますか?この種のことをする最善の方法はありますか?私たちはJQueryを使うことができましたが、Microsoft Testingフレームワークを使いたいと思っています。AJAX JSONのUnitTestメソッドのAPIへの呼び出し

[TestMethod] 
    public void TestMethod1() 
    { 
     string brand = "KEWL"; 
     string BRAND = ""; 

     var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://203.135.xx.138:4040/api/v1/subscriptions/signup.format"); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      string json = @"{" + 
      " 'api_key': '91230D10-247C-11E1-83FF-9B9C4824019B'," + 
      " 'phone': '12122639043', " + 
      " 'dob': '11231954', " + 
      "  'subscriptions': [ " + 
      "    {" + 
      "     'Brand':'" + brand + "', " + 
      "    'campaign':'BTLNDN', " + 
      "     'groups':[" + 
      "       {" + 
      "       'group': 'BTLALL'," + 
      "       'subscribed':true" + 
      "       } " + 
      "     ]," + 
      " 'lang': 'en' " + 
      "    }" + 
      "    ] " + 
      " }"; 

      streamWriter.Write(json); 
     } 
     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var responseText = streamReader.ReadToEnd(); 
      JavaScriptSerializer serializer = new JavaScriptSerializer(); 
      Dictionary<string, dynamic> dc = serializer.Deserialize<Dictionary<string, dynamic>>(responseText); 
      var kev = dc; 
      foreach (var key1 in dc.Keys) 
      { 
       var value3 = dc["ReturnData"]["subscriptions"]; 
       BRAND = value3[0]["brand"]; 
      // var groups = value3[0]["groups"]; 
      } 


     } 
     Assert.AreEqual(brand, BRAND); 
    } 
+2

ユニットテストでのWOW、HTTPリクエスト。単体テストはそのようなことをしていません。これは統合テストによく似ています。 –

答えて

3

ASP.NET MVCメソッドを単体テストするアイデアは、HTTPリクエストまたは応答機能を使用せずにテストを実行できるということです。

を使用すると、以下のような方法があるとします。

public class MyController : Controller 
{ 
    public ActionResult MyAjax() 
    { 
     return Json(new { Test = "Test" }); 
    } 
} 

あなたは、このコードでそれをテストすることができます。

[TestMethod] 
public void MyTest() 
{ 
    MyControllercontroller = new MyController(); 

    JsonResult json = controller.MyAjax() as JsonResult; 

    Assert.IsNotNull(json); 

    dynamic data = json.Data; 

    Assert.AreEqual("Test", data.Test); 
} 

を、あなたのテストプロジェクトが見ることができることを確認する必要があり、動的キーワードを使用するにはWebプロジェクトの内部構造(これは匿名型が内部宣言されているためです)。これを行うには、WebプロジェクトのAssemblyInfo.csファイルに[assembly: InternalsVisibleTo("YourTestProject")]を追加します。

+0

ありがとうございます - これはテストに最適な方法ですが、外部APIに外部からアクセスできるようにする場合はどうなりますか?この試験方法は理にかなっていますか?テストルーティング、外部アクセスなどがあります。このようにテストする理由はありますか? –

+0

@BillPorter単体テストの場合は、これが方法です。ユニットテストの多くは、あなたのコードが期待どおりに動作していることを確認します。あなたは、すべての機能が期待通りに機能していることを確認するために、いくつかの機能テストしか必要としません。これが外部APIの場合は、関数が期待どおりに動作していることを確認したい(ユニットテスト)。 –

関連する問題