[英]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());
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.