c# - 使用 ActionResult 测试 web api 控制器
问题描述
我尝试在单元测试中获取 GetAll() 函数的结果,但我无法将其转换为列表。我怎样才能正确地做到这一点?
测试:
[Fact]
public async Task GetAllHeroes_ShouldReturnAllHeroes()
{
var controller = new HeroesController(_heroes);
var response = await controller.GetHeroes() as List<Hero>;
//here i need response list, but there's error
}
控制器:
// GET: api/v1/heroes
[HttpGet]
[Produces(typeof(List<Hero>))]
public async Task<ActionResult<IEnumerable<Hero>>> GetHeroes()
{
var result = await _heroes.GetAll();
return Ok(result);
}
解决方案
您需要将响应解析为模型列表
像这样
var response = await controller.GetHeroes();
Assert.IsType<OkObjectResult>(result);
var content = ((OkObjectResult)result).Value;
Assert.IsType<List<Hero>>(content);
var Heros = (List<Hero>)content;
我添加了一些其他可能有用的断言
推荐阅读
- reactjs - 反应原生上下文和不推荐使用的超级用法
- automated-tests - 如何使用数据驱动方法从下拉列表中选择 2 个或更多值 - 现在可以使用
- javascript - 使用 StoreRouterConnectingModule 时根减速器显示为空
- c++ - 通过 LIBUV 管道发送和接收文件描述符
- react-native - 反应原生从多维数组中删除项目
- tensorflow - Tensorflow 2.0 出错,自定义损失函数
- javascript - 如何在 Vue 中更新、保存和显示头像?
- python - 我在 pygame 中的游戏无法正常运行
- java - 如何在方法签名中调用 application.yaml 参数?爪哇
- haproxy - 如何在fluentd中读取未转义的json?