首页 > 解决方案 > 使用 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);
    }

标签: c#.netunit-testing

解决方案


您需要将响应解析为模型列表

像这样

var response = await controller.GetHeroes();

Assert.IsType<OkObjectResult>(result);

var content = ((OkObjectResult)result).Value;
Assert.IsType<List<Hero>>(content);

var Heros = (List<Hero>)content;

我添加了一些其他可能有用的断言


推荐阅读