我正在使用C#和.NET Core2.0开发一个ASP.NET Core2 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();或者我可以在IActionResult中获取IEnumerable<Models.GS1AIPresentation>
发布于 2018-01-15 21:41:37
控制器中调用的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
https://stackoverflow.com/questions/48264105
复制相似问题