Я completly в новинку для Moq и теперь пытающийся создать насмешку для System.Reflection.Assembly
класс. Я использую этот код:
var mockAssembly = new Mock<Assembly>();
mockAssembly.Setup( x => x.GetTypes() ).Returns( new Type[] {
typeof( Type1 ),
typeof( Type2 )
} );
Но когда я запускаю тесты, я получаю следующее исключение:
System.ArgumentException : The type System.Reflection.Assembly
implements ISerializable, but failed to provide a deserialization
constructor
Stack Trace:
at
Castle.DynamicProxy.Generators.BaseProxyGenerator.VerifyIfBaseImplementsGetObjectData(Type
baseType)
at
Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type[]
interfaces, ProxyGenerationOptions options)
at Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(Type
classToProxy, Type[] additionalInterfacesToProxy,
ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type
classToProxy, Type[] additionalInterfacesToProxy,
ProxyGenerationOptions options, Object[] constructorArguments,
IInterceptor[] interceptors)
at Moq.Proxy.CastleProxyFactory.CreateProxy[T](ICallInterceptor
interceptor, Type[] interfaces, Object[] arguments)
at Moq.Mock`1.<InitializeInstance>b__0()
at Moq.PexProtector.Invoke(Action action)
at Moq.Mock`1.InitializeInstance()
at Moq.Mock`1.OnGetObject()
at Moq.Mock`1.get_Object()
Могли Вы reccomend меня правильный способ дразнить ISerializable
классы (как System.Reflection.Assembly
) с Moq.
Заранее спасибо!
Проблема не в интерфейсе ISerializable. Вы можете имитировать классы ISerializable.
Обратите внимание на сообщение об исключении:
Тип System.Reflection.Assembly реализует ISerializable, но не смог предоставить конструктор десериализации
Проблема в том, что Сборка не предоставляет конструктор десериализации.
Вместо имитации вы можете попробовать создать динамическую сборку и построить из нее.
var appDomain = AppDomain.CurrentDomain;
var assembly = appDomain.DefineDynamicAssembly(new AssemblyName("Test"), AssemblyBuilderAccess.ReflectionOnly);