コンストラクター注入を使用する次のクラスがあります。
public class Service : IService
{
public Service(IRepository repository, IProvider provider) { ... }
}
このクラスのほとんどのメソッドでは、 と の Moq モックを作成しIRepository
、IProvider
を構築するだけService
です。ただし、クラスには、同じクラスの他のいくつかのメソッドを呼び出すメソッドが 1 つあります。このメソッドをテストするには、これらすべてのメソッドをまとめてテストするのではなく、メソッドがこれらのメソッドを正しく呼び出し、戻り値を正しく処理することをテストしたいと考えています。
これを行う最善の方法は、モックを作成することService
です。以前に Moq で具象クラスを問題なくモックしました。Moq でコンストラクター引数を必要とする具体的なクラスを問題なくモックしました。ただし、モックされたオブジェクトのコンストラクターにモックされた引数を渡す必要があったのはこれが初めてです。当然、私はこのようにしようとしました:
var repository = new Mock<IRepository>();
var provider = new Mock<IProvider>();
var service = new Mock<Service>(repository.Object, provider.Object);
しかし、それはうまくいきません。代わりに、次のエラーが表示されます。
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException : Can not instantiate proxy of class: My.Namespace.Service.
Could not find a constructor that would match given arguments:
Castle.Proxies.IRepository
Castle.Proxies.IProvider
のコンストラクターがs やs のService
ような単純な引数を取る場合、これは正常に機能しますが、私がモックしているインターフェイスを取る場合は機能しません。これどうやってやるの?int
string