Как дразнить классы ISerializable с Moq?

Я 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.VerifyIfBaseImplementsGet­ObjectData(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.

Заранее спасибо!

6
задан sam 23 April 2010 в 20:14
поделиться

2 ответа

Проблема не в интерфейсе ISerializable. Вы можете имитировать классы ISerializable.

Обратите внимание на сообщение об исключении:

Тип System.Reflection.Assembly реализует ISerializable, но не смог предоставить конструктор десериализации

Проблема в том, что Сборка не предоставляет конструктор десериализации.

2
ответ дан 9 December 2019 в 22:30
поделиться

Вместо имитации вы можете попробовать создать динамическую сборку и построить из нее.

var appDomain = AppDomain.CurrentDomain;
var assembly = appDomain.DefineDynamicAssembly(new AssemblyName("Test"), AssemblyBuilderAccess.ReflectionOnly);
1
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: