使用 MOQ 在 xunit 项目中使用参数化构造函数对控制器进行单元测试

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

我正在尝试为我的控制器编写一个 xunit 测试方法来测试 JsonResult。但是由于控制器需要一个将从 DI 容器注入的参数,我不确定在我的测试方法中如何以及在哪里传递这个参数。

控制器:

public class AppGuidelinesController : Controller
{
    private IAppGuidelineBLRepository appGuidelineRepos;

    public AppGuidelinesController(IAppGuidelineDBRepository dataRepos)
    {
        appGuidelineRepos = new AppGuidelineBLRepository(dataRepos);
    }
}

测试方法

[Fact]
public void GetJsonData_Returns_JsonResult()
{
    // Arrange
    Mock<IAppGuidelineDBRepository> dbReposMock = new Mock<IAppGuidelineDBRepository>();

    var appGuideline = new AppGuideline()
    {
        Id = 1
    };

    dbReposMock.Setup(repo => repo.AddGuideline(appGuideline));

    var controller = new AppGuidelinesController(dbReposMock.Object);

    var mockControllerContext = new Mock<ControllerContext>();
    controller.ControllerContext = mockControllerContext.Object;

    AppGuidelineRequestModel appGuidelineRequestModel = new AppGuidelineRequestModel()
    {
        Id = 1
    };

    OperationStatus expectedOperationStatus = new OperationStatus
    {
        StatusType = hrlib_test.Enums.StatusType.Success
    };

    // Act
    var result = controller.AddGuideline(appGuidelineRequestModel);


    // Assert
    Assert.NotNull(result);
    Assert.IsType<JsonResult>(result);

    var actualOperationStatus = result.Value as OperationStatus;
    Assert.NotNull(actualOperationStatus);
    Assert.Equal(expectedOperationStatus.StatusType, actualOperationStatus.StatusType);
}

当我运行测试时,出现以下错误

System.ArgumentException:无法传递构造函数参数 界面模拟。

请帮助我解决这个问题并继续使用其他方法。谢谢你。

c# asp.net-core-6.0 xunit.net
1个回答
0
投票

似乎我忘记删除构造函数内隐藏在我视线之外的一段测试代码,该代码导致实际错误而不是测试方法。我把它去掉后,测试就通过了。我发现从此链接 => 无法为接口模拟传递构造函数参数

© www.soinside.com 2019 - 2024. All rights reserved.