アプリケーションを単体テストするときに、依存性注入を学習しようとしていますが、問題が発生しました。
私はコンソールアプリケーションを作成しており、コンテナはMain()で作成および初期化され、get-property
inとして使用できるProgram.Container
ため、アプリケーションのどこからでもを呼び出すことができますProgram.Container.Resolve<..>()
。
私はこのようなServiceValidatorクラスを持っています:
public class ServiceValidator
{
private readonly IConfiguration _configuration;
private readonly IService _service;
public ServiceValidator(IConfiguration configuration, IService service)
{
_configuration = configuration;
_service = service;
}
別のクラスで私は使用します
ServiceValidator serviceValidator = Program.Container.Resolve<ServiceValidator>();
serviceValidator.VerifyVersion();
Program.Container.Resolve
セットアップされていないため、ユニットテストで問題が発生するのはこの呼び出しです。
コンテナでresolveを呼び出すのは悪い習慣ですか?ServiceValidatorインスタンスを作成しMain()
てオブジェクトを渡すこともできますが、次のメソッドに渡されるオブジェクトのパラメーターが多くなるため、これはばかげているようです。
したがって、クラス内でResolveを呼び出すことは許容できると思いますが、その場合、コンテナーは単体テスト用に構成する必要があります。どうすればよいですか、コンテナをプログラムクラス以外の場所に移動する必要がありますか?あなたは何をお勧めします?
重要な場合は、UnityとC#を使用しています
ありがとう :-)