Проблема StrongNameKeyPair при попытке использовать MoQ

Я пытаюсь создать макет HttpContextBase для модульного теста.

var fakePrinciple = new GenericPrincipal(
           new GenericIdentity(userId), 
           rolesList.ToArray());            
var mockHttpContext = new Mock<HttpContextBase>();
mockHttpContext.Setup(t => t.User).Returns(fakePrinciple);
HttpContextBase mockedContext = mockHttpContext.Object;

модульный тест завершается с ошибкой в последнем операторе с

бросил исключение: Система.ArgumentException: невозможно получить открытый ключ StrongNameKeyPair..

система.Отображение.StrongNameKeyPair.nGetPublicKey (Boolean exported, Byte [] массив, строка контейнер) Система.Отображение.StrongNameKeyPair.get_PublicKey() Система.домен приложений.InternalDefineDynamicAssembly(AssemblyName имя, доступ AssemblyBuilderAccess, String dir, доказательства доказательства, Объект permissionset requiredPermissions, Набор разрешений optionalPermissions, RefusedPermissions объект permissionset , StackCrawlMark& stackMark, Интерфейс IEnumerable`1 unsafeAssemblyAttributes) Система.домен приложений.DefineDynamicAssembly(AssemblyName имя, доступ AssemblyBuilderAccess) Замок.DynamicProxy.ModuleScope.CreateModule (Boolean signStrongName) Замок.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName() Замок.DynamicProxy.ModuleScope.ObtainDynamicModule (Boolean isStrongNamed) Замок.DynamicProxy.Генераторы.Излучатели.ClassEmitter.CreateTypeBuilder (ModuleScope modulescope, имя строки, тип (бла бла СНиП)

я погуглил, и предложения здесь, похоже, не работают (изменение настройки безопасности папки RSA и т. д) http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158

правильно ли я думаю, что поскольку HttpContextBase является частью System.Web.Abstraction, который является подписанной сборки. Moq действительно попытается подписать динамическую сборку и потерпит неудачу?

3 ответов


MoQ использует замок DynamicProxy для генерации насмешек во время выполнения. Rhino Mocks использует ту же библиотеку для той же цели. Если вы проверите здесь:

http://ayende.com/Blog/archive/2006/06/09/UnableToObtainPublicKeyForStrongNameKeyPair.aspx

вы увидите, что проблема заключается в одном из разрешений на хранилище ключей машины. Любая учетная запись пользователя, выполняющая тест, должна иметь разрешение на создание и удаление ключей в хранилище.

вы можете найти подробнее об этой проблеме здесь: http://groups.google.co.uk/group/RhinoMocks/browse_thread/thread/26df68ff01567509/5ddebf407228edc4


проверить этот блог Скотт Хансельман - это немного старый, но MvcMockHelpers он показывает там, вероятно, даст вам хорошее представление о том, как выполнить то, что вы делаете.


вы должны смотреть это видео на asp.net сайт, который показывает удивительный пример implemention.