![](/img/trans.png)
[英]How to use XUnit Dependency Constructor Injection to create my concrete classes
[英]Unresolved constructor arguments error when trying to use dependency injection with XUnit
我的每個 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:發生一個或多個錯誤。 ---- 類夾具類型“MyProj.Tests.TestFixture”具有一個或多個未解析的構造函數參數:IConfiguration 配置 ---- 以下構造函數參數沒有匹配的夾具數據:TestFixture 夾具
我想知道為什么我有像你這樣的代碼,因為文檔( 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();
}
我知道這個問題很老了,但也許該解決方案對某些人有用。
我遇到了同樣的問題並使用 WebApplicationFactory 泛型類修復了它。 希望這將是其他人的解決方案。
代替
: IClassFixture<TestFixture> ->
: IClassFixture<WebApplicationFactory<Startup>>
欲了解更多詳情,您可以訪問官方頁面
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.