0

设置

  • 解决方案使用棱镜
  • 用VB编写的模块项目
  • 用 C# 编写的测试项目

在我的单元测试中,我模拟了模块使用的服务并传递它们,但是当模块尝试解析时,它失败并出现以下异常

    {"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,(none) "}

下面是使用 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 的限制不允许我使用它?

4

1 回答 1

1

我发现是什么导致了这个问题,这是 Moq 框架的限制。Aparently Moq 不能模拟静态方法,包括扩展方法和 Container.Resolve 是扩展方法,因此它失败了。

于 2012-09-11T09:03:17.867 回答