返回BadRequest()时测试ActionResult <t>

时间:2019-01-17 13:47:41

标签: c# nunit asp.net-core-webapi

我正在尝试使用.NET Core的Web API在控制器周围构建单元测试。在为响应应该为BadRequest(string)的否定场景创建测试时,我遇到了一个问题:

ThingController.cs

[HttpPost("thing/{id}")]
[ProducesResponseType(400)]
public async Task<ActionResult<Thing>> Add(string id, [FromBody] Thing thing)
{
  if (String.IsNullOrEmpty(id))
  {
    return BadRequest("Must provide Thing ID");
  }

  return this.thingRepo.AddThing(id, thing);
}

ThingControllerTests.cs

[Test]
public async Task AddThing_FailOnEmptyId() {
  var mockRepo = new Mock<IThingRepository>();
  var testController = new ThingController(mockRepo.Object);
  var result = await testController.AddThing("", this.validThing);

  Assert.That(result, Is.InstanceOf<BadRequestObjectResult>());
}

在这种情况下,result的值始终是Thing,而我希望它是BadRequestObjectResult

一些其他详细信息:

  • 我已验证测试可以正确执行分支并按预期执行return BadRequest("Must provide Thing ID")
  • 如果我将返回类型从Task<ActionResult<T>>更改为Task<ActionResult>,则测试将按预期通过。
  • 在阅读Microsoft网站Controller action return types - ActionResult T type上的文档之后,我认为我的代码本身对于此测试而言足够正确。

是否需要执行特定的强制转换才能获得正确的类型?我是否缺少有关使NUnit起作用的详细信息?

0 个答案:

没有答案