繁体   English   中英

单元测试 - 控制器没有从ASP.NET Core Web API项目中的模拟IConfiguration中获取值

[英]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);

//...

ASP.NET Core中的参考配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM