【问题标题】:ASP.NET Core Test xUnit ControllerASP.NET Core 测试 xUnit 控制器
【发布时间】:2017-12-12 22:56:56
【问题描述】:

这个测试总是返回null,测试总是失败......但是当我运行项目时一切正常并正常返回数据,这个项目使用RavenDB

控制器

[Route("api/[controller]")]
public class CategoryController : Controller
{
    private readonly AppDbContext _context = new AppDbContext();

    // GET: api/category
    [HttpGet("{id}")]
    public async Task<JsonResult> Get(string id)
    {
        using (IAsyncDocumentSession session = _context.SessionAsync){
            var result = await session.LoadAsync<Category>(id);
            return Json(result);
        }
    }
} 

并使用 xUnit 进行测试

 [Fact]
public async Task GetShouldReturnCategory()
{
    // Arrange
    var _categoryController = Substitute.For<CategoryController>();
    var category = CreateCategory();

    // Act
    var result = await _categoryController.Get(category.Result.Id);

    //Asserts here
}

【问题讨论】:

    标签: c# unit-testing asp.net-core xunit


    【解决方案1】:

    根据您的问题,被测系统 (SUT)CategoryController。所以,模拟CategoryController 是没有意义的;相反,您想模拟AppDbContext

    如果你想对一个控制器进行单元测试,你应该使用 ASP.NET Core 的依赖注入,并通过构造函数注入来注入它的依赖。换句话说,您不应该使用 new

    通常,我们注入接口而不是具体类,这样我们就可以轻松地模拟它。

    您的代码缺少太多部分,所以我只能直接给您。如果您想了解更多详细信息,可以查看GitHub 的示例项目,它使用 NSubstitute 和 XUnit。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 2022-08-03
      • 2017-10-23
      • 1970-01-01
      • 2018-05-01
      • 2019-02-26
      • 1970-01-01
      相关资源
      最近更新 更多