首页 > 解决方案 > 如何在 xunit 测试项目中读取 appsettings.json?

问题描述

我正在尝试为用 MVC 控制器编写的一种方法编写测试用例,并且在该方法中我正在读取 AppSettings.json 文件。如下

public class MemberController : ControllerBase
{
    IMemberRepository _memberRepository;
    public PayPalKeys payPal;
    public ActiveDirectory activeDirectory;
    private static GraphServiceClient _graphServiceClient;
    public MemberController(IMemberRepository member, IOptions<PayPalKeys> payPal, IOptions<ActiveDirectory> activeDirectory)
    {
        _memberRepository = member;
        this.payPal = payPal.Value;
        this.activeDirectory = activeDirectory.Value;
    }   
    
    private IConfigurationRoot LoadAppSettings()
    {
        try {
            var config = new ConfigurationBuilder()
            .SetBasePath(System.IO.Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", false, true)
            .Build();
            -
            -
            -
        }
        catch(Exception ae){}
    }
}

以下是我的测试代码

[Fact]
public void Payment()
{
    var memberRepositoryManagerMock = new Mock<IMemberRepository>();     
    var members = new Members() {};
    var controller = new MemberController(memberRepositoryManagerMock.Object, GetPayPalConfigurationMock().Object, GetActiveDirectoryConfigurationMock().Object);
    var result = controller.MakePayment(members);
}

并且来自控制器的该方法给出了异常,因为找不到配置文件'appsettings.json'并且不是可选的。物理路径为“F:\API.Test\bin\Debug\netcoreapp2.2\appsettings.json”。

在这里,我不明白如何在测试用例代码中模拟“appsettings.json”部分。

标签: c#asp.net-corexunit.net

解决方案


右键单击 Visual Studio 中的设置文件并将“复制到输出目录”设置为“始终复制”或“从不复制”。

在此处输入图像描述

要更精确地确定文件位置,请更改您的配置生成器以执行此操作:

var config = new ConfigurationBuilder()
    .SetBasePath(AppContext.BaseDirectory)
    .AddJsonFile("appsettings.json", false, true)
    .Build();

推荐阅读