使用Kendo单元测试ASP.NET MVC4控制器

3
我正在尝试对返回Kendo.UI.Mvc DataSource结果的ASP.NET MVC 4控制器进行单元测试,并将其包装为Json。问题在于我无法访问返回的实际数据...它始终为空。那么问题是,如何验证从控制器返回的封装了Kendo.UI DataSourceResult的JSON?
1个回答

6
这个问题令人恼火,因为在调试时我可以在VS中看到我想要的数据集合。我已经更新了测试装置 - 可以对模型数据进行断言。
基本上,我做了以下几步:
1.将ActionResult强制转换为JsonResult
2.使用dynamic类型从JsonResult获取"data",返回Kendo.Mvc.UI.DataSourceResult。在使用dynamic类型之前,只返回null。(自己注意,学习更多关于dynamic类型的知识)
3.将步骤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);
    }

请问如何获取以下内容? var db = new FakePharmacyDirectoryDb(); db.AddSet(TestData.PharmacyLocations(10)); - Eng Soon Cheah
1
干得好!但我会使用var kendoResultData = jsonResult.Data as DataSourceResult;而不是dynamic - Pedro S Cord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接