首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试IActionResult及其内容

如何测试IActionResult及其内容
EN

Stack Overflow用户
提问于 2018-01-15 21:35:47
回答 1查看 11.8K关注 0票数 10

我正在使用C#和.NET Core2.0开发一个ASP.NET Core2 web api。

我更改了一个方法,将它添加到try-catch中,以允许我返回状态代码。

代码语言:javascript
复制
public IEnumerable<GS1AIPresentation> Get()
{
    return _context
        .GS1AI
        .Select(g => _mapper.CreatePresentation(g))
        .ToList();
}

更改为:

代码语言:javascript
复制
public IActionResult Get()
{
    try
    {
        return Ok(_context
            .GS1AI
            .Select(g => _mapper.CreatePresentation(g))
            .ToList());
    }
    catch (Exception)
    {
        return StatusCode(500);
    }
}

但是现在我在测试方法中遇到了一个问题,因为它现在返回一个IActionResult而不是IEnumerable<GS1AIPresentation>

代码语言:javascript
复制
[Test]
public void ShouldReturnGS1Available()
{
    // Arrange
    MockGS1(mockContext, gs1Data);

    GS1AIController controller =
        new GS1AIController(mockContext.Object, mockMapper.Object);

    // Act
    IEnumerable<Models.GS1AIPresentation> presentations = controller.Get();

    // Arrange
    Assert.AreEqual(presentations.Select(g => g.Id).Intersect(gs1Data.Select(d => d.Id)).Count(),
                    presentations.Count());
}

我的问题在这里:IEnumerable<Models.GS1AIPresentation> presentations = controller.Get();

我是否需要重构并创建一个新方法来测试Select

此选择:

代码语言:javascript
复制
return _context
    .GS1AI
    .Select(g => _mapper.CreatePresentation(g))
    .ToList();

或者我可以在IActionResult中获取IEnumerable<Models.GS1AIPresentation>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-15 21:41:37

控制器中调用的return Ok(...)将返回一个OkObjectResult,它派生自IActionResult,因此您需要强制转换为该类型,然后访问其中的值。

代码语言:javascript
复制
[Test]
public void ShouldReturnGS1Available() {
    // Arrange
    MockGS1(mockContext, gs1Data);

    var controller = new GS1AIController(mockContext.Object, mockMapper.Object);

    // Act
    IActionResult result = controller.Get();        

    // Assert
    var okObjectResult = result as OkObjectResult;
    Assert.IsNotNull(okObjectResult);
    var presentations = okObjectResult.Value as IEnumerable<Models.GS1AIPresentation>;
    Assert.IsNotNull(presentations);
    Assert.AreEqual(presentations.Select(g => g.Id).Intersect(gs1Data.Select(d => d.Id)).Count(),
                    presentations.Count());
}

参考Asp.Net Core Action Results Explained

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48264105

复制
相关文章

相似问题

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