相关疑难解决方法(0)

使用Castle Windsor使用AutoFixture集成测试应用程序的技术

我是AutoFixture的新手,所以我不知道以下想法是否有意义或是合理的事情.我有一个应用程序,我负责集成测试,它大量使用Castle Windsor.为了简化依赖关系管理并使我的测试更像应用程序代码,我一直在我的test initialize方法和using container.Resolve构建Windsor容器来实例化我正在测试的代码.我想摆脱这种方法,因为它在某些情况下限制了我的灵活性.

我想做的是测试看起来像这样:

[Theory]
[Dependency]
public void TestWithDependencies(IThing thing)
{
    thing.Hello();
}
Run Code Online (Sandbox Code Playgroud)

为了实现这一目标,我可以执行以下操作:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做确实有效,但我想避免的是需要将每个接口复制到从Windsor容器到AutoFixture IFixture的实现映射.

c# integration-testing castle-windsor autofixture

6
推荐指数
1
解决办法
862
查看次数