Техника использования AutoFixture для интеграционного тестирования приложения с помощью Castle Windsor

Я новичок в 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.

6
задан thebeekeeper 14 August 2012 в 18:02
поделиться