我在使用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));
关于c# - AutoMock-如何使用键注册进行单元测试?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47798273/