我在使用 Autofac 键控注册的工厂编写测试时遇到问题。
在 Autofac 模块中,我注册如下内容:
builder.RegisterType<TypeAMessageHandler>().As<IMessageHandler>()
.Keyed<IMessageHandler>(MessageTypeEnum.A);
builder.RegisterType<TypeBMessageHandler>().As<IMessageHandler>()
.Keyed<IMessageHandler>(MessageTypeEnum.B);
builder.RegisterType<MessageHandlerFactory().As<IMessageHandlerFactory>();
然后工厂的构造函数得到一个很好的索引,由 Autofac 注入到它的构造函数中:
public MessageHandlerFactory(
IIndex<MessageTypeEnum, IMessageHandler> messageTypeToHandlerMap)
但是,我不知道如何注入IIndex<,>
当我使用 Automock 进行单元测试时automock.Create<MessageHandlerFactory>()
。告诉 AutoMock 提供消息处理程序实现不会将它们放入键控索引中。创建 IIndex 的显式实现并要求 Automock 提供这也不起作用 - 在这两种情况下,我的工厂都会得到一个空IIndex<,>
注射。
测试密钥注册的正确方法是什么?
我发现 AutoMock 并没有真正内置对键控组件的支持,但确实具有允许您配置容器的工厂方法的重载。
所以这有效:
var messageAMock = new Mock<IMessageHandler>();
var autoMock = AutoMock.GetStrict(builder => builder.RegisterInstance(messageAMock.Object).Keyed<IMessageHandler>(MessageTypeEnum.A));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)