设置
在我的单元测试中,我模拟了模块使用的服务并传递它们,但是当模块尝试解析时,它会因以下异常而失败
{"Resolution of the dependency failed, type = "UnderwritingWorkflow.Common.Services.IValidationService", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, UnderwritingWorkflow.Common.Services.IValidationService, is an interface and cannot be constructed. Are you missing a type mapping?
在例外时,容器是:
解决UnderwritingWorkflow.Common.Services.IValidationService,(无) “}
以下是使用UnityContainer注册对象的代码:
var validationService = new Mock<IValidationService>(MockBehavior.Strict);
validationService.Setup(x => x.Validate(Moq.It.IsAny<object>()))
.Returns(() => new ValidationResults());
Container.RegisterInstance(validationService.Object);
另外如果在注册之后尝试从c#直接解析IServiceValidation(从构造函数中)似乎有效:
Container.Resolve<IValidationService>();
为什么会发生这种情况?
注意:我正在使用Moq模拟框架,它在运行时创建类,我想知道它是否是VB的限制,不允许我使用它?
答案 0 :(得分:1)
我找到了造成这个问题的原因,这是Moq框架的局限性。显然Moq不能模拟静态方法,包括扩展方法和Container.Resolve是一个扩展方法,因此它失败了。