我正在尝试使用.NET Core的Web API在控制器周围构建单元测试。在为响应应该为BadRequest(string)
的否定场景创建测试时,我遇到了一个问题:
[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);
}
[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>
,则测试将按预期通过。 是否需要执行特定的强制转换才能获得正确的类型?我是否缺少有关使NUnit起作用的详细信息?