如何正确模拟在实现依赖注入的不同项目中调用方法的控制器?

How to properly mock a controller that calls methods in different projects that implement dependency injection?

我有一个这样构建的解决方案

>Solution
>>BusinessLogic.proj
>>DataAccessLayer.proj
>>Domain.proj
>>Web.proj
>>Test.proj

Web.UserController

public class UserController
{
    private readonly IUserManager _userManager;

    public UserController(IUserManager userManager)
    {
        _userManager = userManager;
    }

    public string GetUser()
    {
        return _userManager.GetAllUsers();
    }
}

BusinessLogic.UserManager

public class UserManager : IUserManager
{
    private readonly IUserQueryMaster _userQueryMaster;

    public UserManager(IUserQueryMaster userQueryMaster)
    {
        _userQueryMaster = userQueryMaster;
    }
    public string GetAllUsers()
    {

        return _userQueryMaster.GetAllUsers();
    }
}

DataAccesLayer.UserQueryMaster

public class UserQueryMaster : IUserQueryMaster
{
    private readonly CoreContext _CoreContext;

    public UserQueryMaster(CoreContext CoreContext)
    {
        _CoreContext = CoreContext;
    }

    public string GetAllUsers()
    {
        var res = _CoreContext.Users.ToList();
        var json = JsonConvert.SerializeObject(res, Formatting.Indented);
        return json;
    }
}

测试

public class UnitTest
{
    [Fact]
    public void GetAllUsers()
    {
        //Arrange
        string JsonResult = @"{"//user1, user2... json format 
                                }";

        var mockIUserManager = new Mock<IUserManager>();
        UserController GetUserController = new UserController(mockIUserManager.Object);


        //Act
        var result = GetUserController.GetUser();

        //Assert
        Assert.Equal(JsonResult, result);
    }

}

现在当我调试单元测试时,执行无法进入 (F11) class 'UserManager',导致 'result' 评估为 'null'。我怀疑这可能是因为我没有在测试中的任何地方指定 UserManager 和 UserQueryMaster 都有自己需要的服务来访问我正在寻找的数据。

我的问题是,如何使用此 'nested dependency injection' 创建我的单元测试?

您在嘲笑 IUserManager,这意味着所有嵌套服务都不相关。

您唯一缺少的是将模拟设置为 return 您可以测试的内容。例如:

mockIUserManager.Setup(mum => mum.GetAllUsers()).Returns(JsonResult);