【问题标题】:Type to mock must be an interface or an abstract or non-sealed class要模拟的类型必须是接口或抽象或非密封类
【发布时间】:2015-05-27 23:02:33
【问题描述】:

我正在使用 Moq 在 VB 中模拟以下类:

Public class Factory(Of T)
  Inherits Factory

  Public Overridable Shadows Readonly Property Model() as TModel
    Get
       ..
    End Get
  End Property

当我尝试使用 Moq 在单元测试中模拟 Model 属性时,如下所示:

Dim factory As New Mock(of Factory(Of TestModel))
factory.Setup(Function(i) i.Model).Returns(new TestModel With { .. })

这失败并出现错误:

System.ArgumentException:要模拟的类型必须是接口或 抽象或非密封类。 ---> System.TypeLoadException:访问 被拒绝: 'PA.PSP.PFAD.Mvc.PFADFactory`1[PA.PSP.PFAD.Mvc.OrderExtensionsTest+TestModel]'。 结果堆栈跟踪:在 System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule 模块,Int32 tk,ObjectHandleOnStack 类型)在 System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() 在 System.Reflection.Emit.TypeBuilder.CreateType() 在 Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType(TypeBuilder 类型)在 Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType() 在 Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(字符串 名称、Type[] 接口、INamingScope 命名范围)

知道为什么,因为虽然它不是接口或抽象,但它不是密封的(在 VB 中没有定义 NotInheritable)......

【问题讨论】:

  • 你:Dim factory As New Mock(of Factory(Of TestModel)) 我想知道嵌套的TestModel 类是否是公共的,它的包含类OrderExtensionsTest 是否也是公共的? Moq 需要“即时”创建一个派生自 Factory(Of TestModel) 的类(或在错误文本中调用的 PFADFactory(Of TestModel))。

标签: .net vb.net unit-testing moq


【解决方案1】:

您是否尝试让 Model() 虚拟化?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多