簡體   English   中英

使用Kendo對ASP.NET MVC4控制器進行單元測試

[英]Unit Testing ASP.NET MVC4 Controller with Kendo

我正在嘗試單元測試一個ASP.NET MVC 4控制器,它返回包含為Json的Kendo.UI.Mvc DataSource結果。 問題是我無法獲得返回的實際數據..它始終為null。

問題是,如何驗證從包裝Kendo.UI DataSourceResult的Controller返回的JSON。

這個問題很令人憤怒,因為我可以在調試時看到VS中我想要的數據集合。 我更新了測試夾具 - 可以執行模型數據上的斷言。

基本上我做了以下事情:

  1. 將ActionResult強制轉換為JsonResult
  2. 使用動態類型,從JsonResult獲取返回Kendo.Mvc.UI.DataSourceResult的“數據”。 在使用動態類型之前,僅返回null。 (注意自我,了解有關動態類型的更多信息)
  3. 將step2的結果轉換為要測試的數據類型。

控制器:

    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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM