使用 xunit test mvc.controller 检查返回类型是否为 HttpNotFoundResult 时出
本文关键字:是否 HttpNotFoundResult 时出 返回类型 检查 xunit test mvc controller 使用 | 更新日期: 2023-09-27 18:32:15
我正在尝试测试一个Microsoft.AspNet.Mvc.Controller
,如果传入的 id 被击中,则返回Task<IActionResult>
,如果没有命中,则返回HttpNotFound()
。
如何使用 xUnit 进行测试,以查看我得到的是 HttpNotFound 还是实际结果?
这是控制器方法:
[HttpGet("{id}")]
public async Task<IActionResult> Get(string id)
{
var company = await _repository.GetSingle(id);
if (company == null)
return HttpNotFound();
return new ObjectResult(company);
}
这是测试方法(不起作用):
[Theory]
[InlineData("1")]
[InlineData("01")]
[InlineData("10")]
public async void TestGetSingleNonExistingCompany(string id)
{
var controller = new CompanyController(new CompanyRepositoryMock());
try
{
var res = await controller.Get(id);
Assert.False(true);
}
catch (Exception e)
{
Assert.True(true);
}
}
我猜的问题是controller.Get(id)
实际上并没有抛出Exception
,但我不能使用typeOf
,因为res
变量的类型是在编译时决定的,而不是运行时。
运行 Assert.IsType 时:
[Theory]
[InlineData("1")]
[InlineData("01")]
[InlineData("10")]
public async void TestGetSingleNonExistingCompany(string id)
{
var controller = new CompanyController(new CompanyRepositoryMock());
var res = await controller.Get(id);
Assert.IsType(typeof (HttpNotFoundResult), res.GetType());
}
我收到此消息:
Assert.IsType() Failure
Expected: Microsoft.AspNet.Mvc.HttpNotFoundResult
Actual: System.RuntimeType
有什么想法吗?
Assert.IsType
的第二个参数应该是您正在检查的对象本身,而不是对象的类型。试试这个,当返回HttpNotFound()
的结果时,你的断言应该会成功:
Assert.IsType(typeof (HttpNotFoundResult), res);