首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有匿名类型的IHttpActionResult的OkNegotiatedContentResult单元测试

具有匿名类型的IHttpActionResult的OkNegotiatedContentResult单元测试
EN

Stack Overflow用户
提问于 2021-09-28 09:28:04
回答 2查看 562关注 0票数 1

我正在使用MS测试单元测试我的Web控制器。

下面是具有返回类型的Web方法:

代码语言:javascript
运行
复制
public IHttpActionResult MethodName(){ //Code logic 
    return Ok(new { Data = result, Total = (result.Count() > 0 ? result.First().TotalCount : 0) });
}

在上面的代码片段中:

IEnumerable

  • Total
  1. 数据类型为Int

类型

为了测试上面的API方法,下面的返回类型是我尝试过的:

代码语言:javascript
运行
复制
[TestMethod]
public void TestMethodName(){
var result = controller.MethodName();
//Below line is having issue and thus the contentResult is null 
var contentResult = result as OkNegotiatedContentResult<List<ViewModelName>>;
}

将Int添加到OkNegotiatedContentResult抛出错误,因为它只例外于单个参数

下面是API的实际返回类型:

{System.Web.Http.Results.OkNegotiatedContentResult<<>f__AnonymousType0,int>>}

我应该如何转换结果,使我可以使用它的内容为断言?

提前谢谢你。代码示例不胜感激。

EN

Stack Overflow用户

发布于 2021-09-28 11:35:29

这是一个解决方案,乍一看可能有点麻烦。

所以,首先要确保我们收到了一个OkNegotiatedContentResult

代码语言:javascript
运行
复制
//Act
var actionResult = controller.MethodName();

//Assert - OkNegotiated result
var resultType = actionResult.GetType().GetGenericTypeDefinition();
Assert.AreEqual(resultType.GetGenericTypeDefinition(), typeof(OkNegotiatedContentResult<>));

然后确保匿名类型定义了Data属性

免责声明:以下代码在运行时无法检索Content

代码语言:javascript
运行
复制
//Assert - Anonymous type
dynamic content = ((dynamic)actionResult).Content;
Assert.IsTrue(content.GetType().GetProperty("Data") != null);

并确保Data属性是一个集合。

代码语言:javascript
运行
复制
//Assert - Data property 
Assert.IsInstanceOfType(content.Data, typeof(IEnumerable<ViewModelName>));
var data = (IEnumerable<ViewModelName>)content.Data;
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69359128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档