我最近在使用Unity多年后开始使用Autofac,所以我偶尔遇到一些(新手?)问题。
现在我有以下情况:使用ILifetimeScope.ResolveKeyed
返回特定存储库的Factory类,例如:
scope.ResolveKeyed<IDocumentRepository>(EncryptionLevel.None, new NamedParameter("container", "test"))
在我的单元测试中(使用AutoFac.Extras.AutoMock)我有:
using (var mock = AutoMock.GetLoose())
{
mock.Mock<IDocumentRepository>().Setup(m => m.GetByIdAsync(It.IsAny<Guid>())).Returns(Task.FromResult("hello"));
}
问题出现在单元测试中,它说
请求的服务'None(Blob.IDocumentRepository)'尚未注册。要避免此异常,请注册组件以提供服务,使用IsRegistered()检查服务注册,或使用ResolveOptional()方法解析可选依赖项。
我试图模仿ILifetimeScope
并让它返回我的嘲笑IDocumentRepository
,但显然是not possible。
那么我该怎样做才能让ILifetimeScope
解决我的嘲笑IDocumentRepository
?
答案 0 :(得分:1)
您可以将 Mock<T>
注册为 Keyed
到 AutoMock 工厂
var mockToReg = new Mock<IDocumentRepository>();
using (var mock = AutoMock.GetLoose(builder =>
{
b.RegisterMock(mockToReg ).Keyed<IDocumentRepository>(EncryptionLevel.None);
}))