ConfigurationBuilder.AddJsonFile 每隔一段时间就使用错误的 json 文件

问题描述 投票:0回答:1

我有一个.Net 8.0 单元测试项目。该项目是包含应用程序项目的解决方案的一部分。

作为测试设置的一部分,使用 ConfigurationBuilder。

var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.AddJsonFile("appsettings.json", optional: true);
var configuration = configurationBuilder.Build();

重复运行测试时,配置会从应用程序项目加载(不正确的)appSettings.json 文件,下次从测试项目加载(正确的)appSettings.json 文件,然后再次加载不正确的文件,然后再次加载正确的文件,等等

应用程序 appSettings.json 文件不包含测试项目中所需的设置。

我尝试了几种解决方案,让 ConfigurationBuilder 始终加载正确的设置文件。

  • 创建PhysicalFileProvider,并使用ConfigurationBuilder.SetFileProvider
  • 创建PhysicalFileProvider,并在调用AddJsonFile时指定
  • 使用SetBaseDirectory

以上方法均未能解决问题。 我的问题是:为什么 ConfigurationBuilder 在两个 appSettings.json 文件之间交替? 我怎样才能阻止它这样做?

json .net unit-testing appsettings xunit.net
1个回答
0
投票

我有几个问题

您的项目输出文件夹是否相同?如果是这样,您可以将测试 appsettings.json 替换为 appsettings.test.json 等。

测试项目.csproj

<ItemGroup>
    <None Update="appsettings.test.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
</ItemGroup>

AgentTest.cs

public class AgentTests : BaseTest
{
    static IConfiguration Configuration {get; set;}

    public AgentTests() : base(false)
    {

    }

    [SetUp]
    public void Setup()
    {
       Configuration = new ConfigurationBuilder().AddJsonFile("appsettings.test.json").Build();

    }

    [Test]
    public async Task Can_Get_AgentById()
    {
       // Arrange

       int agentId = 350;
       IAgentRepository agentRepo = new AgentService(Configuration);

       // Act       

       var result = await agentRepo.GetAgentById(agentId);

       // Assert
     
       Assert.That(result is not null);
   }
}

我可以这样使用。

如果此答案不能解决您的问题,请告诉我更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.