我正在尝试为我的控制器编写一个 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:无法传递构造函数参数 界面模拟。
请帮助我解决这个问题并继续使用其他方法。谢谢你。
似乎我忘记删除构造函数内隐藏在我视线之外的一段测试代码,该代码导致实际错误而不是测试方法。我把它去掉后,测试就通过了。我发现从此链接 => 无法为接口模拟传递构造函数参数