c# - 无法从 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;
}
请提出一些提取响应内容的方法。我尝试了JsonResult或OkNegotiatedContentResult。但没有运气。两者都返回 NULL。请帮助我卡住了
解决方案
XUNIT
在我提出框架之前,我已经尝试了一切。XUnit 框架解决了这个问题。以及它提供了很大的好处
。安装在 NugetPackages 之后
xunit
xunit.runner
xunit.runner.console
推荐阅读
- python - 在python中从二进制转换为文本
- javascript - 空白页:Python 中的 Selenium Chrome 自动化
- php - 上传不同属性的多个文件
- javascript - 如何将函数签名限制为仅接受特定的类型参数对
- mysql - mysql ORDER BY CASE 未返回预期结果
- javascript - 错误:“[vuex] 不要在突变处理程序之外改变 vuex 存储状态。”
- sql-server - 如何在 SQL Server 2008 中进行布尔字符串比较
- sql - MS SQL Server 上是否有用于动态列表或多个字符串集的 LIKE 运算符?
- c - 在 C 中解析文件/将其添加到数组中
- dataframe - 错误 java.lang.AssertionError:当我显示数据帧时断言失败(创建加入其他数据帧)