我正在考虑将一些复杂的创建代码转换为使用IoC容器,Autofac,因为我非常相信TDD,我正在为Module配置编写单元测试.
大多数功能都很容易测试,例如
var obj = container.Resolve<IThing>();
Assert.IsInstanceOfType(obj, typeof(ThingImplementer));
Run Code Online (Sandbox Code Playgroud)
但是我们有很多情况,我们有多个相同接口的实现者,不同的实现者被传递给不同的具体类.我通过使用命名注册解决了这个问题,例如
builder.RegisterType<ThingImplementer>().Named<IThing>("Implementer1");
builder.RegisterType<OtherImplementer>().Named<IThing>("Implementer2");
builder.Register(c => new Foo(c.ResolveNamed<IThing>("Implementer1"))).As<IFoo>();
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚的是编写单元测试以确保Foo获得ThingImplementer而不是OtherImplementer的简单方法.我想知道是否值得付出努力,我们确实有高级集成测试来涵盖这一点,但他们没有提供单元测试所做的文档或重构好处.
你会为此写一个单元测试吗?如果是这样,怎么样?