Asp.net mvc 4 使用剑道对ASP.NET MVC4控制器进行单元测试
我正在尝试对一个ASP.NET MVC 4控制器进行单元测试,该控制器返回包装为Json的Kendo.UI.MVC数据源结果。问题是我无法获取返回的实际数据。。它总是空的Asp.net mvc 4 使用剑道对ASP.NET MVC4控制器进行单元测试,asp.net-mvc-4,nunit,kendo-ui,Asp.net Mvc 4,Nunit,Kendo Ui,我正在尝试对一个ASP.NET MVC 4控制器进行单元测试,该控制器返回包装为Json的Kendo.UI.MVC数据源结果。问题是我无法获取返回的实际数据。。它总是空的 问题是,如何验证从封装Kendo.UI数据源结果的控制器返回的JSON。这个问题令人愤怒,因为我在调试时可以在VS中看到我想要的数据集合。我已经更新了测试夹具-可以对模型数据执行断言 基本上,我做了以下工作: 将ActionResult强制转换为JsonResult 使用动态类型,从返回Kendo.Mvc.UI.DataSou
问题是,如何验证从封装Kendo.UI数据源结果的控制器返回的JSON。这个问题令人愤怒,因为我在调试时可以在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);
}
单元测试:
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 db=新的FakePharmacyDirectoryDb();
db.AddSet(TestData.pharmacLocations(10));
//安装控制器,我们需要模拟DataSourceRequest
//Mvc用来与视图通信的
var控制器=新的DirectoryController(db);
var kendoDataRequest=new DataSourceRequest();
//从控制器获取结果
var controllerResult=controller.EditRead(kendoDataRequest);
//将结果强制转换为Json
var jsonResult=controllerResult作为jsonResult;
//在运行时,jsonRsult.Data将返回Kendo.Mvc.UI.DataSourceResult类型的变量
动态kendoResultData=jsonResult.Data;
//…然后可以将DataSourceResult.Data强制转换为
//您尝试测试的返回类型
var results=kendoResultData.Data作为列表;
Assert.IsInstanceOf(结果);
Assert.AreEqual(10,results.Count);
}
我可以问一下如何得到这个吗?var db=新的FakePharmacyDirectoryDb();db.AddSet(TestData.pharmacLocations(10));做得好!但我会使用var kendoResultData=jsonResult.Data作为DataSourceResult代码>而不是动态