Метод UnitTest для AJAX JSON-вызовов API - PullRequest
0 голосов
/ 25 января 2012

Я пытаюсь написать контрольные примеры для наших вызовов AJAX в нашем API.Делать просто веб-запрос и ответ.Мой вопрос касается ответа.Есть ли более простой способ извлечь значения JSON из ответа?Это лучший способ сделать такую ​​вещь?Я знаю, что мы могли бы использовать JQuery, но хотели использовать среду тестирования Microsoft.

    [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);
    }

1 Ответ

3 голосов
/ 25 января 2012

Идея модульного тестирования методов 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);
}

Чтобы использовать динамическое ключевое слово, вы должны убедиться, что ваш тестовый проект может видеть внутренние компоненты вашего веб-проекта (это потому, что анонимные типы объявлены внутренними),Вы можете сделать это, добавив: [assembly: InternalsVisibleTo("YourTestProject")] в файл AssemblyInfo.cs вашего веб-проекта.

...