![](/img/trans.png)
[英]Unit testing an AuthorizeAttribute on an ASP.NET Core MVC API controller
[英]Unit Testing - Controller not picking up value from mocked IConfiguration in ASP.NET Core Web API Project
我试图使用模拟服务在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);
//...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.