ASP.NET Web APIプロジェクトに含まれるいくつかのクラスをテストしたいと思います。私はTestServer経由でリクエスト/レスポンスの統合テストをする必要はありませんが、テストはできるだけ「本物」に近いものにしたいと思っています。そこでスタートアップで追加されたサービスを使用してクラスを解決したいが、テストベースでスタブ/モックのいくつかを変更する(いくつかのテストにはモックが必要なものもあれば、そうでないものもある)。ASP.NETコアテストでサービスをスタブ/モックする方法
ASP.NETが内部依存性注入フレームワークを持っていない時代には、本当に簡単でした。だから、私はちょうどコンテナにすべての依存関係を登録し、すべてのテストのために子コンテナを作成し、いくつかの依存関係をモックに変更するクラスを呼び出すだけです。
var host = A.Fake<IHostingEnvironment>();
var startup = new Startup(host);
var services = new ServiceCollection();
//Add stubs here
startup.ConfigureServices(services);
var provider = services.BuildServiceProvider();
provider.GetService<IClientsHandler>();
動作しているようですが、私はすべてのテストのために全体の起動インフラストラクチャを作成したくない:
私はこのような何かを試してみました。私はそれを一度作成し、各テストの "子コンテナ"または "子スコープ"を作成したいと思います。出来ますか?基本的には、Startup以外のサービスを変更する方法を探しています。
しかし、私は模擬インターフェイスを手動で注入したくありません。私はServicesを使ってクラスを解決したいので、クラスを解決する前にいくつかのインターフェイスのモックを指定したいと思います。 – SiberianGuy
答え全体を読む。最後の段落は単体テストのためのものであり、答えの大部分は統合テストを行う方法とそれらがどのように行われることになっているかです。それはTestServerのためのもので、Startupの使用法が作られています。しかし、2番目のコード例に記載されているように、テストサーバーインスタンス – Tseng
からIServiceProviderにアクセスするだけでテストごとに新しいTestServerを作成する必要がありますか? TestServerを1つ作成して各テストの依存関係を変更する方法がわかりません(いくつかのテストではモックが必要ですが、他のテストではそうしません)。 – SiberianGuy