我正在尝试使用模拟服务对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);
}
但是当我尝试从控制器动作内部的注入 IConfiguration
服务中检索值时,如下所示:
var Issuer = Configuration["Jwt:Issuer"],
这又回到null
了我,我不确定在这里我在做什么错。
您x.GetSection("Jwt:Issuer").Value
尚未设置Configuration["Jwt:Issuer"]
。这是两种不同的情况,将导致上述问题。
与尝试正确模拟所有内容相比,最好构建一个具有所有所需功能的内存配置。
//...
var fakeValues = new Dictionary<string, string>
{
{"Jwt:Encryptionkey", "abc"},
{"Jwt:Issuer", "test.com"},
{"Jwt:ExpiryTimeInMinutes", "some value"}
};
IConfiguration config = new ConfigurationBuilder()
.AddInMemoryCollection(fakeValues)
.Build();
//...
var controller = new CustomerController(customerApplication.Object, null,
claimApplication.Object, null, null, config, null);
//...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句