Как я могу провести модульное тестирование результатов Json на веб-сайте ASP.NET MVC3? - PullRequest
10 голосов
/ 01 ноября 2011

Я пытаюсь проверить значения Data, которые возвращаются из ASP.NET MVC3 JsonView, но я не знаю, как.


У меня есть простой веб-сайт ASP.NET MVC3 с методом действия, который возвращает JsonView.

например (некоторые псевдо-код для списка анонимных типов):

var lotsOfFail = database.GetMeThatDamnDataList();
var returnData = (from x in lotsOfFail
                  select new
                  {
                      Id = x.Id,
                      Name = x.Name
                      ..
                   }).ToList();
return Json(returnData, JsonRequestBehavior.AllowGet);

Сейчас в моем модульном тесте я пытаюсь проверить значения Data. Поэтому, следуя различным предложениям, я делаю следующее ... которая работает ... -

// Act.
JsonResult jsonResult = controller.PewPewKThxBai(null, null);

// Assert.    
Assert.IsNotNull(jsonResult);
dynamic data = jsonResult.Data;
Assert.IsNotNull(data);
Assert.IsTrue(data.Count >= 0);

Но я также хочу проверить первые три результата, которые возвращаются, с фиксированным списком данных.

Обратите внимание, как у меня следующий код: var lotsOfFail = database.GetMeThatDamnDataList(); Ну, база данных заполнена некоторыми жестко закодированными данными И некоторыми случайными данными. Первые три записи жестко закодированы.

Таким образом, я хочу убедиться, что я могу проверить свои жестко закодированные данные.

Вот так ...

// Assert.    
Assert.IsNotNull(jsonResult);
dynamic data = jsonResult.Data;
Assert.IsNotNull(data);

var hardCodedData =
    FakeWhatevers.CreateHardcodedWhatevers()
    .Where(x => x.EventType == EventType.BannableViolation)
    .ToList();
Assert.IsTrue(data.Count >= hardCodedData .Count);

for (int i = 0; i < hardCodedData .Count; i++)
{
    Assert.AreEqual(data[0].Id== hardCodedData [0].GameServerId);
}

но поскольку data является динамическим, я не знаю, как проверить его свойства.

Есть идеи?

1 Ответ

9 голосов
/ 01 ноября 2011

Должно работать следующее:

for (int i = 0; i < hardCodedData.Count; i++)
{
    Assert.AreEqual(hardCodedData[i].GameServerId, data[i].Id);
    Assert.AreEqual(hardCodedData[i].GameServerName, data[i].Name);
    ...
}

Обратите внимание, что я перевернул порядок аргументов, так как первое является ожидаемым, а второе - действительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...