使用 Moq 和 Xunit 对通用基础控制器进行单元测试

问题描述 投票:0回答:0

我目前有一个这样的基类:

public abstract class AbstractControllerBase<T> : Controller where T : AbstractControllerBase<T>
{
    private ILogger<T> _logger;

    protected ILogger<T> Logger => _logger ??= HttpContext.RequestServices.GetService<ILogger<T>>();

    public AbstractControllerBase()
    { }
}

和这样的继承类:

public abstract class ControllerBase<T> : AbstractControllerBase<T> where T : ControllerBase<T>
{
    private IRepository _repository;

    protected IRepository Repository
    {
        get
        {
            if (_repository == null && HttpContext != null)
                _repository = (IRepository)HttpContext.RequestServices.GetService(typeof(IRepository));
            return _repository;
        }
    }

    public ControllerBase()
    { }

    public IActionResult CheckRedirectUrl(string url)
    {
        if (Url.IsLocalUrl(url))
        {
            var redirectResult = Redirect(url);
            return redirectResult;
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }
    }
}

有25个控制器继承自ControllerBase。如何在单元测试时初始化存储库。我试过这样做:

if (controller is Website.Controllers.ControllerBase < typeof(controller) >)
{
    ((Website.Controllers.ControllerBase)controller).Repository = repository;
}

但这也需要通用参数。请建议。

c# .net asp.net-core moq xunit.net
© www.soinside.com 2019 - 2024. All rights reserved.