我正在使用MS测试单元测试我的Web控制器。
下面是具有返回类型的Web方法:
public IHttpActionResult MethodName(){ //Code logic
return Ok(new { Data = result, Total = (result.Count() > 0 ? result.First().TotalCount : 0) });
}
在上面的代码片段中:
IEnumerable
类型
为了测试上面的API方法,下面的返回类型是我尝试过的:
[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>>}
我应该如何转换结果,使我可以使用它的内容为断言?
提前谢谢你。代码示例不胜感激。
发布于 2021-09-28 11:35:29
这是一个解决方案,乍一看可能有点麻烦。
所以,首先要确保我们收到了一个OkNegotiatedContentResult
//Act
var actionResult = controller.MethodName();
//Assert - OkNegotiated result
var resultType = actionResult.GetType().GetGenericTypeDefinition();
Assert.AreEqual(resultType.GetGenericTypeDefinition(), typeof(OkNegotiatedContentResult<>));
然后确保匿名类型定义了Data
属性
免责声明:以下代码在运行时无法检索Content
//Assert - Anonymous type
dynamic content = ((dynamic)actionResult).Content;
Assert.IsTrue(content.GetType().GetProperty("Data") != null);
并确保Data
属性是一个集合。
//Assert - Data property
Assert.IsInstanceOfType(content.Data, typeof(IEnumerable<ViewModelName>));
var data = (IEnumerable<ViewModelName>)content.Data;
https://stackoverflow.com/questions/69359128
复制相似问题