gpt4 book ai didi

c# - 如何测试 IActionResult 及其内容

转载 作者:太空狗 更新时间:2023-10-29 17:51:31 24 4
gpt4 key购买 nike

我正在使用 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);
}
}

但是现在我的测试方法出现了问题,因为现在它返回一个 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

最佳答案

在 Controller 中调用的 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 Core Action Results Explained

关于c# - 如何测试 IActionResult 及其内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48264105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com