尝试使用XUnit的依赖注入时,未解析的构造函数参数错误

时间:2018-04-17 18:47:00

标签: c# asp.net-core xunit xunit.net

我的每个XUnit测试项目都有一个appsettings.json文件,它指定了一些设置。我总是使用IConfiguration的依赖注入来检索我的Test Fixture类中的这些设置。现在我想到了它,我完全不知道过去如何解决IConfiguration,因为XUnit项目中没有Startup.cs和ConfigureServices方法。但我发誓它有效。

以下用于工作,现在却没有:

夹具:

public class TestFixture : IDisposable
{
    public IConfiguration Configuration { get; set; }

    public TestFixture(IConfiguration configuration)
    {
        Configuration = configuration;
    }
}

测试类:

public class TestCases : IClassFixture<TestFixture>
{
    public TestCases(TestFixture fixture)
    {

    }
}

我收到的错误如下:

  

消息:System.AggregateException:发生一个或多个错误。   ----类夹具类型&#39; MyProj.Tests.TestFixture&#39;有一个或多个未解析的构造函数参数:IConfiguration配置   ----以下构造函数参数没有匹配的夹具数据:TestFixture fixture

1 个答案:

答案 0 :(得分:0)

我想知道为什么我有像您这样的代码,因为文档(https://xunit.github.io/docs/shared-context)没有说关于在Fixtures中使用DI的任何事情...就我而言,我通过删除DI解决了它,因为我有同样的错误你有。

然后我有这样的代码,可以为单元测试提供服务集合。

var services = new ServiceCollection();
ConfigureServices(services);
IServiceProvider serviceProvider = services.BuildServiceProvider();

// Assign shortcuts accessors to registered components
UserManager = serviceProvider.GetRequiredService<UserManager<User>>();
RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole<string>>>();

我的ConfigureServices()在注册要收集的服务之前调用此代码,因此这回答了有关IConfiguration的问题。请注意,我现在使用.net core 2.1,之前使用的是2.0。 但是我仍然想知道像您和其他发表评论的人,为什么DI之前没有崩溃?

private static IConfiguration LoadConfiguration()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json");

        return builder.Build();
    }