我在使用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/

10-10 13:47