J'utilise Moq pour se moquer de la classe suivante dans VB:type de fantaisie doit être une interface ou une classe abstraite ou non scellée
Public class Factory(Of T)
Inherits Factory
Public Overridable Shadows Readonly Property Model() as TModel
Get
..
End Get
End Property
Lorsque je tente d'utiliser Moq pour se moquer de la propriété du modèle en un test unitaire comme ceci:
Dim factory As New Mock(of Factory(Of TestModel))
factory.Setup(Function(i) i.Model).Returns(new TestModel With { .. })
Cela échoue avec l'erreur:
System.ArgumentException: Type to mock must be an interface or an abstract or non-sealed class. ---> System.TypeLoadException: Access is denied: 'PA.PSP.PFAD.Mvc.PFADFactory`1[PA.PSP.PFAD.Mvc.OrderExtensionsTest+TestModel]'. Result StackTrace: at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, Int32 tk, ObjectHandleOnStack type) at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() at System.Reflection.Emit.TypeBuilder.CreateType() at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType(TypeBuilder type) at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType() at Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(String name, Type[] interfaces, INamingScope namingScope)
Toute idée pourquoi car si ce n'est pas une interface ou abstr t, il n'est pas scellé (ne définit pas NotInheritable dans VB) ....
Vous: 'Dim usine comme nouveau simulacre (de Factory (Of TestModel))' Je me demande si la classe 'TestModel' imbriquée est publique, et si sa classe contenant' OrderExtensionsTest' est également publique? Moq doit créer une classe "à la volée" qui dérive de 'Factory (Of TestModel)' (ou 'PFADFactory (Of TestModel)' comme il est appelé dans le texte d'erreur). –