AspNetCore と TestServer の統合テストでの Autofac 依存関係のモックと解決

ConfigureTestContainer を使用して、モック化された実装をテスト用のコンテナー ビルダーに登録します

//...
.ConfigureServices(services => services.AddAutofac())
.ConfigureTestContainer<ContainerBuilder>(builder => {
    builder.RegisterType<MockEventStoreManager>().As<IEventStoreManager>();
})
//...

これにより、Startup.ConfigureContainer によって追加された実際の実装が取得されないようにする必要があります。 として

ConfigureTestContainer Startup.ConfigureContainer の後に呼び出されます そのため、モックへの最後の登録がサービスのデフォルト プロバイダーになります。


Nkosi の優れた回答に加えて、ConfigureTestContainer について言及したいと思います。 .NET Core 3.0 の時点で、Microsoft が Web ホストよりも推奨している汎用ホストでは動作しません。ただし、Autofac チームの Alistair Evans によって提案された回避策があります。残念ながら、非推奨の IStartupConfigureContainerFilter に依存しています .NET 5.0 で削除されました。

これは、現在 .NET 5.0 では、汎用ホストを使用する場合、統合テストで外部 DI コンテナーによって注入された依存関係をモックする方法がないことを意味します。

幸いなことに、ASP.NET チームの David Fowler がこの問題を調査しています。