使用 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

有什么想法吗?

使用 xunit test mvc.controller 检查返回类型是否为 HttpNotFoundResult 时出

Assert.IsType的第二个参数应该是您正在检查的对象本身,而不是对象的类型。试试这个,当返回HttpNotFound()的结果时,你的断言应该会成功:

Assert.IsType(typeof (HttpNotFoundResult), res);