首页 > 解决方案 > 无法从 IhttpActionResult 中提取内容,出现错误

问题描述

我有一个填充一些随机列表的控制器,我将该列表Response与消息组合在一个对象中。以下是控制器代码:

[HttpPost]
    [Authorize]
    [Route(RouteConfig.Routes.LovList.contactStatus)]
    public IHttpActionResult ContactStatusList()
    {
        try
        {
            var result = _herodb.GetList(
                            DBClass.DBConstants.ListConstants.query_Contact_Status);
            return Ok(new Models.Response(
                        Models.ResponseMessages.Success,
                        result)
                     );
        }
        catch(System.Data.SqlClient.SqlException)
        {
            return InternalServerError();
        }
        catch(System.Exception ex)
        {
            Logger.Error(ex, ex.Message, ex.StackTrace);
            return InternalServerError();
        }
        
    }

当我尝试对这个控制器进行单元测试时,我成功地模拟了我的 DB 函数GetList,它返回了一个虚拟列表。但在单元测试方法中,我无法从 IhttpActionResult 中提取内容。这是我的测试方法。

[TestMethod()]
    public void ContactStatusListTest_ShouldReturnData_WhenCalled()
    {
        //Arrange
        Mock<DBClass.IHerodb> mock = new Mock<DBClass.IHerodb>();

        mock.Setup(x => x.GetList(DBClass.DBConstants.ListConstants.query_Contact_Status))
            .Returns(CreateContactList());

        //Act
        IHttpActionResult result =new ListController(mock.Object).ContactStatusList();
        // JsonResult<IHttpActionResult> json = result.
        var res = result as OkNegotiatedContentResult<List<object>>;
       // var res = result as JsonResult<List<object>>;
        Models.Response response= res.Content[0] as Models.Response;

        //Assert
        Assert.IsNotInstanceOfType(result, typeof(NotFoundResult));
        Assert.IsInstanceOfType(result, typeof(OkResult));
        Assert.AreEqual(response.Message, Models.ResponseMessages.Success);
        Assert.IsNotNull(response.Data);
    }
    public System.Data.DataTable CreateContactList()
    {
        DataTable table = new DataTable();
        table.Columns.Add("ContactStatus");
        DataRow row1 = table.NewRow();row1["ContactStatus"] = "Contacted"; table.Rows.Add(row1);
        DataRow row2 = table.NewRow(); row2["ContactStatus"] = "Not Contacted"; table.Rows.Add(row2);
        DataRow row3 = table.NewRow(); row3["ContactStatus"] = "Contacted"; table.Rows.Add(row3);
        return table;
    }

我在结果变量中得到以下响应。 在此处输入图像描述

请提出一些提取响应内容的方法。我尝试了JsonResultOkNegotiatedContentResult。但没有运气。两者都返回 NULL。请帮助我卡住了

标签: c#visual-studiounit-testingmoqrest

解决方案


XUNIT在我提出框架之前,我已经尝试了一切。XUnit 框架解决了这个问题。以及它提供了很大的好处 。安装在 NugetPackages 之后 xunit xunit.runner xunit.runner.console


推荐阅读