簡體   English   中英

如何測試IActionResult及其內容

[英]How to test IActionResult and its content

我正在使用C#和.NET Core 2.0開發ASP.NET Core 2 web api。

我已經更改了一個方法來添加try-catch以允許我返回狀態代碼。

public IEnumerable<GS1AIPresentation> Get()
{
    return _context
        .GS1AI
        .Select(g => _mapper.CreatePresentation(g))
        .ToList();
}

變成:

public IActionResult Get()
{
    try
    {
        return Ok(_context
            .GS1AI
            .Select(g => _mapper.CreatePresentation(g))
            .ToList());
    }
    catch (Exception)
    {
        return StatusCode(500);
    }
}

但是現在我的Test方法存在問題,因為它現在返回IActionResult而不是IEnumerable<GS1AIPresentation>

[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

這個選擇:

return _context
    .GS1AI
    .Select(g => _mapper.CreatePresentation(g))
    .ToList();

或者,也許我能得到IEnumerable<Models.GS1AIPresentation>IActionResult

在控制器中調用的return Ok(...)返回一個OkObjectResult ,它派生自IActionResult因此您需要轉換為該類型,然后訪問其中的值。

[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核心行動結果解釋

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM