簡體   English   中英

嘗試在 XUnit 中使用依賴注入時出現未解決的構造函數參數錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM