Asp.net mvc 4 使用剑道对ASP.NET MVC4控制器进行单元测试

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

我正在尝试对一个ASP.NET MVC 4控制器进行单元测试,该控制器返回包装为Json的Kendo.UI.MVC数据源结果。问题是我无法获取返回的实际数据。。它总是空的


问题是,如何验证从封装Kendo.UI数据源结果的控制器返回的JSON。

这个问题令人愤怒,因为我在调试时可以在VS中看到我想要的数据集合。我已经更新了测试夹具-可以对模型数据执行断言

基本上,我做了以下工作:

  • 将ActionResult强制转换为JsonResult
  • 使用动态类型,从返回Kendo.Mvc.UI.DataSourceResult的JsonResult获取“数据”。在使用动态类型之前,只返回null。(请注意,了解有关动态类型的更多信息)
  • 将步骤2中的结果强制转换为要测试的数据类型
  • 控制器:

        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而不是
    动态