教育目的で、IWindsorContainerのモックを設定して、実行された登録を単体テストできるようにするにはどうすればよいですか?
次のような方法があるとします。
public void MakeRegistration<S, T>(IWindsorContainer container)
where S : class
where T : class, S
{
container.Register(Component.For<S>().ImplementedBy<T>().LifeStyle.Transient);
}
Moqを使用して、単体テストを作成したいと思います。
var container = new Mock<IWindsorContainer>(MockBehavior.Strict);
container.Setup(c => c.Register(
Component.For<IFoo>()
.ImplementedBy<Foo>()
.LifeStyle.Transient));
var registrar = new MyRegistrar();
registrar.MakeRegistration<IFoo, Foo>(container.Object);
上記は予想通り失敗しますが、適切にテストする方法に興味があります。
モックの代わりに実際のコンテナーを使用して、クラスの2つの異なるインスタンスを解決することを確認できますが、実際には外部コード(ウィンザーコンテナー自体)の動作に依存しているため、「純粋な」単体テストではないと思います。
私が言ったように、これは理論的なものなので、それが必要かどうかは問題の範囲外です。