我是 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 的实现映射。