【发布时间】:2013-02-02 23:58:00
【问题描述】:
我正在尝试对一个 ASP.NET MVC 4 控制器进行单元测试,该控制器返回包装为 Json 的 Kendo.UI.Mvc 数据源结果。问题是我无法获取返回的实际数据.. 它始终为空。
问题是,如何验证从包装 Kendo.UI DataSourceResult 的控制器返回的 JSON。
【问题讨论】:
标签: asp.net-mvc-4 nunit kendo-ui
我正在尝试对一个 ASP.NET MVC 4 控制器进行单元测试,该控制器返回包装为 Json 的 Kendo.UI.Mvc 数据源结果。问题是我无法获取返回的实际数据.. 它始终为空。
问题是,如何验证从包装 Kendo.UI DataSourceResult 的控制器返回的 JSON。
【问题讨论】:
标签: asp.net-mvc-4 nunit kendo-ui
这个问题令人恼火,因为我在调试时可以在 VS 中看到我想要的数据集合。我已经更新了测试夹具 - 可以对模型数据执行断言。
基本上我做了以下事情:
控制器:
public ActionResult EditRead([DataSourceRequest] DataSourceRequest request)
{
return Json(GetViewModel().ToDataSourceResult(request));
}
单元测试:
[Test]
public void EditRead_Should_Read_List_Or_Pharmacies()
{
//Create test db
var db = new FakePharmacyDirectoryDb();
db.AddSet(TestData.PharmacyLocations(10));
//setup controller, we need to mock a DataSourceRequest
//that Kendo.Mvc uses to communicate with the View
var controller = new DirectoryController(db);
var kendoDataRequest = new DataSourceRequest();
//get the result back from the controller
var controllerResult = controller.EditRead(kendoDataRequest);
//cast the results to Json
var jsonResult = controllerResult as JsonResult;
//at runtime, jsonRsult.Data data will return variable of type Kendo.Mvc.UI.DataSourceResult
dynamic kendoResultData = jsonResult.Data;
//... which you can then cast DataSourceResult.Data as
//the return type you are trying to test
var results = kendoResultData.Data as List<PharmacyLocation>;
Assert.IsInstanceOf<List<PharmacyLocation>>(results);
Assert.AreEqual(10,results.Count);
}
【讨论】:
var kendoResultData = jsonResult.Data as DataSourceResult; 而不是dynamic