2010-03-11 5 views
5

단위 테스트를위한 모의 HttpContextBase를 만들려고합니다.MoQ를 사용하려고 할 때 StrongNameKeyPair 문제가 발생했습니다.

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; 

단위 테스트는 예외 던져

와 마지막 문에서 실패 .. StrongNameKeyPair 공개 키를 수 없습니다 을 얻을

System.Reflection.StrongNameKeyPair을 : System.ArgumentException를 .nGetPublicKey (부울 내 보낸, Byte [] 배열, 문자열 ) System.Reflection.StrongNameKeyPair.get_PublicKey() System.AppDomain.InternalDefineDynamicAssembly (의 AssemblyName 이름, AssemblyBuilderAccess 액세스, 문자열 DIR, 증거의 증거 PermissionSet를 requiredPermissions, PermissionSet를 optionalPermissions, PermissionSet를 refusedPermissions, StackCrawlMark & stackMark, IEnumerable`1 unsafeAssemblyAttributes) System.AppDomain. DefineDynamicAssembly (의 AssemblyName 이름, AssemblyBuilderAccess 액세스) Castle.DynamicProxy.ModuleScope.CreateModule (부울 signStrongName) Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongNam E() Castle.DynamicProxy.ModuleScope.ObtainDynamicModule (부울 isStrongNamed) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder (ModuleScope modulescope, 문자열 이름, 유형 (ㅋ ㅋ ㅋ ㅋ 싹둑)

I

http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158 내가 HttpContextBase 때문에 서명 조립입니다 System.Web.Abstraction의 한 부분이라고 생각하는 보정 있습니까 (변경 RSA 폴더 보안 등 설정) 인터넷 검색 여기에 제안 작동하지 않습니다. Moq은 실제로 동적 어셈블리에 서명하려고 시도하고 실패 할 것입니까? 스콧 Hanselman은에 의해

+0

FWIW, 나는 시간을 많이 조롱 HttpContextBase하기 위해 MOQ을 사용하고 그 문제를 가진 적이있다.문제가 무엇이든 Moq와 HttpContextBase의 결합은 일반적이지 않습니다. –

+0

트릭은 RSA가 아닌 MachineKeys 폴더에 권한을 설정해야한다는 것입니다. 당신이 신중한 독자가 아니라면 Ayende의 게시물은 이것을 완전히 명백하게하지 않습니다. –

+0

이렇게 기뻤습니다. 우, 이틀 동안 마침내 고쳐졌습니다. D. 다른 누군가가이 문제를 겪을 경우를 대비하여 나를 도운 참고 자료를 추가하고 싶었습니다. http://ansaurus.com/question/3154345-strong-name-keys-on-windows-7 | http://msdn.microsoft.com/en-us/library/bb909654(v=vs.90).aspx 은 나에게 도움이되는 수정 프로그램에 제게 큰 도움이되었습니다. –

답변

9

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

RSA 및 Crypto 폴더의 사용 권한을 확인했지만 어떻게 든 컴퓨터 키가 설정되지 않았습니다. 윌에게 감사드립니다. –

+0

그것은 중요한 MachineKeys 폴더이고 권한을 상속받지 않기 때문입니다! –

0

체크 아웃 this blog post - 그것은 조금 오래된, 그러나 MvcMockHelpers 그는 아마 당신이 무슨 일을하는지 수행하는 방법의 좋은 생각이 줄 것이다 표시합니다.

-1

놀라운 구현 사례를 보여주는 this video on asp.net 사이트를보아야합니다.

+2

mvc에서 모의하는 방법이 아니라 서명이 문제입니다. – Will

+0

ok 실수 했음 –