【发布时间】:2019-03-29 21:48:49
【问题描述】:
我正在尝试使用模拟服务在 ASP.NET Core Web API 中对我的登录操作进行单元测试,所有模拟都可以正常工作,但是当我尝试模拟我的 IConfiguration 文件时,控制器不会从中获取值。
这是调用我的控制器操作的单元测试代码:
[Fact]
public async Task SignInTest()
{
// Arrange
var requestVM = new CustomerSignInRequestVM
{
EmailPhone = "03026993900",
RegNum = "Abc123"
};
var config = new Mock<IConfiguration>();
//HERE I AM SETTING ALL MY CONFIGURATION VALUES TO RETURN SOME FAKE VALUES
//config.Setup(cf => cf.GetSection("Jwt:Encryptionkey").Value).Returns("01 02 03");
config.Setup(x => x.GetSection("Jwt:Encryptionkey").Value).Returns("abc");
config.Setup(x => x.GetSection("Jwt:Issuer").Value).Returns("test.com");
config.Setup(x => x.GetSection("Jwt:ExpiryTimeInMinutes").Value).Returns("Jwt:ExpiryTimeInMinutes");
//THIS MOCKING WORK FINE IN CONTROLLER ACTION
var customerApplication = new Mock<ICustomerApplication>();
customerApplication.Setup(app => app.GetCustomer(It.IsAny<SignIn>())).ReturnsAsync(GetCustomerMockData);
var claimApplication = new Mock<IClaimApplication>();
claimApplication.Setup(app => app.GetListByRole(It.IsAny<ApplicationRole>())).ReturnsAsync(new List<ApplicationClaim> { new ApplicationClaim { Active = true, ClaimCode = "AUC_GA", ClaimLabel = "Auction.GetAll" } });
//I'm also injecting my IConfiguration object here in my controller setup
var controller = new CustomerController(customerApplication.Object, null, claimApplication.Object, null, null, config.Object, null);
// Act
var response = await controller.SignIn(requestVM, new CancellationToken());
var okObjectResult = response as OkObjectResult;
// Assert
Assert.Equal(200, okObjectResult.StatusCode);
}
但是当我尝试从 injected IConfiguration 服务在我的控制器操作中检索值时,如下所示:
var Issuer = Configuration["Jwt:Issuer"],
这会将null 返回给我,我不确定我在这里做错了什么。
【问题讨论】:
-
你设置了
x.GetSection("Jwt:Issuer").Value却调用了Configuration["Jwt:Issuer"]。这是两个不同的东西。您最好构建一个具有所有所需功能的内存配置,而不是尝试正确模拟所有内容。
标签: c# unit-testing asp.net-core asp.net-core-webapi