Search code examples
c#integration-testingxunit

XUnit Fixtures. Is Not Creating A Single Instance


I am trying to reuse a configuration file across multiple tests as opposed to re-loading the file each time. When I use this code the config file is repeatedly loaded. I am not sure what I have misunderstood?

public class ConfigFixture
{
    public static IConfiguration  ConfigGet()
    {
        IConfiguration config = new ConfigurationBuilder()
            .AddJsonFile("config.local.json")
            .Build();
    
        return config;
    }
    public IConfiguration Config { get => ConfigGet(); }
}

public class Tests: IClassFixture<ConfigFixture>
{
    ConfigFixture conFigFixture { get; }
    
    public Tests(ConfigFixture configFixture)
    {
        this.conFigFixture = configFixture;
    }
    
    [Fact]
    public void  Test1()
    {
        var container = CosmosDataAccess.Utils.Cosmos
            .GetCosmosContainer(conFigFixture.Config);
    }
    
    [Fact]
    public void Test2()
    {
        var container = CosmosDataAccess.Utils.Cosmos
            .GetCosmosContainer(conFigFixture.Config);
    }
}

Solution

  • I believe it's creating a single instance of ConfigFixture - but every time you call the Config property, that is reading the file.

    I would suggest you populate that in the constructor instead:

    public class ConfigFixture
    {
        public IConfiguration Config { get; }
    
        public ConfigFixture()
        {
            Config = new ConfigurationBuilder()
                .AddJsonFile("config.local.json")
                .Build();
        }
    }