私は AutoFixture を初めて使用するので、次のアイデアが理にかなっているのか、それとも合理的なことなのかわかりません。統合テストを担当しているアプリケーションがあり、Castle Windsor を多用しています。依存関係の管理を簡素化し、テストをアプリケーション コードに近づけるために、テストの初期化メソッドで Windsor コンテナーを構築し、container.Resolve を使用してテスト中のコードをインスタンス化しています。特定の状況での柔軟性が制限されているため、そのアプローチから離れたいと思います。
私がやりたいのは、次のようなテストを行うことです。
[Theory]
[Dependency]
public void TestWithDependencies(IThing thing)
{
thing.Hello();
}
これを実現するために、次のことができます。
public sealed class DependencyAttribute : AutoDataAttribute
{
public DependencyAttribute()
: base(new Fixture().Customize(new WindsorCustomization()))
{
}
}
public class WindsorCustomization : ICustomization
{
public WindsorCustomization()
{
// build container here using SUT installers
}
public void Customize(IFixture fixture)
{
fixture.Inject<IThing>(new Thing());
}
}
これを行うとうまくいきますが、回避したいのは、Windsor コンテナーから AutoFixture IFixture への実装マッピングへのすべてのインターフェイスをコピーする必要があることです。