Проблема StrongNameKeyPair при попытке использовать MoQ - PullRequest
6 голосов
/ 11 марта 2010

Я пытаюсь создать макет 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;

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

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

System.Reflection.StrongNameKeyPair.nGetPublicKey (Boolean экспортировано, массив Byte [], строка контейнер) System.Reflection.StrongNameKeyPair.get_PublicKey () System.AppDomain.InternalDefineDynamicAssembly (AssemblyName имя, доступ AssemblyBuilderAccess, String dir, Доказательства, PermissionSet requiredPermissions, PermissionSet опциональныеPermissions, PermissionSet отказано в разрешениях, StackCrawlMark & ​​stackMark, IEnumerable`1 unsafeAssemblyAttributes) System.AppDomain.DefineDynamicAssembly (AssemblyName имя, доступ AssemblyBuilderAccess) Castle.DynamicProxy.ModuleScope.CreateModule (Boolean signStrongName) Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName () Castle.DynamicProxy.ModuleScope.ObtainDynamicModule (Boolean isStrongNamed) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder (ModuleScope modulecope, имя строки, тип (бла-бла-снайп)

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

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

Ответы [ 3 ]

10 голосов
/ 11 марта 2010

MoQ использует Castle 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

0 голосов
/ 11 марта 2010

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

0 голосов
/ 11 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...