提问人:Thameem 提问时间:11/17/2023 最后编辑:Thameem 更新时间:11/21/2023 访问量:37
使用最小起订量在 xunit 项目中使用参数化构造函数对控制器进行单元测试
Unit testing a controller with parameterized constructor in xunit project using MOQ
问:
我正在尝试为我的控制器编写一个 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:无法传递构造函数参数 接口模拟。
请帮助我解决此问题并继续使用其他方法。谢谢。
答:
-1赞
Thameem
11/20/2023
#1
似乎我忘了从构造函数中删除一段测试代码,这会导致实际错误而不是测试方法。删除它后,测试通过了。我从这个链接中找到了一些帮助 => 无法为接口模拟传递构造函数参数
评论
AppGuidelineBLRepository