Я смотрю на преобразование некоторого нашего сложного кода создания для использования контейнера IoC, Autofac, и, поскольку я большой сторонник TDD, я пишу модульные тесты для конфигурации модуля.
Большую часть функциональности очень просто протестировать, например,
var obj = container.Resolve<IThing>();
Assert.IsInstanceOfType(obj, typeof(ThingImplementer));
Но у нас есть ряд случаев, когда у нас есть несколько реализаторов одного и того же интерфейса, и разные реализаторы передаются различным конкретным классам.Я решил эту проблему, используя именованную регистрацию, например
builder.RegisterType<ThingImplementer>().Named<IThing>("Implementer1");
builder.RegisterType<OtherImplementer>().Named<IThing>("Implementer2");
builder.Register(c => new Foo(c.ResolveNamed<IThing>("Implementer1"))).As<IFoo>();
. Что я не могу понять, так это простой способ написания модульного теста, обеспечивающего получение Fing ThingImplementer, а не OtherImplementer.Мне интересно, стоит ли это усилий, у нас есть интеграционные тесты высокого уровня, которые покрывают это, но они не дают преимуществ документации и рефакторинга, которые делают юнит-тесты.
Вы бы написали юнит-тест?за это?Если да, то как?