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