我的每个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
答案 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();
}