2010-03-11 19 views
5

Ich versuche, eine Mock HttpContextBase für Komponententest zu erstellen.StrongNameKeyPair Problem beim Versuch, MoQ zu verwenden

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; 

Das Gerät Test nicht bei der letzten Anweisung mit

Ausnahme ausgelöst hat: System.ArgumentException: Kann nicht für den öffentlichen Schlüssel erhalten StrongNameKeyPair ..

System.Reflection.StrongNameKeyPair .nGetPublicKey (Boolean exportiert, Byte [] Array, String Container) System.Reflection.StrongNameKeyPair.get_PublicKey() System.AppDomain.InternalDefineDynamicAssembly (Assembly Name, Assembly Zugang, String dir, evidence, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet refusedPermissions, StackCrawlMark & stackMark, IEnumerable`1 unsafeAssemblyAttributes) System.AppDomain. DefineDynamicAssembly (Assembly Name, Assemblyzugriff) Castle.DynamicProxy.ModuleScope.CreateModule (Boolean signStrongName) Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongNam e() Castle.DynamicProxy.ModuleScope.ObtainDynamicModule (Boolean isStrongNamed) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder (ModuleScope modulescope, String name, Typ (bla bla Snip)

I gegoogelt und hier scheinen nicht die Vorschläge zur Arbeit (RSA-Ordner Sicherheitsänderung usw. Einstellung) http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158

bin ich Teil System.Web.Abstraction, zu denken, zu korrigieren, dass, weil HttpContextBase ist, die eine signierte Assembly ist. Moq wird tatsächlich versuchen, die dynamische Assembly zu signieren und fehlschlagen?

+0

FWIW, ich habe Moq verwendet zu verspotten Httpcontextbase viele Male und hatte nie das Problem.Was auch immer Ihr Problem ist, es ist nicht allgemein für die Kombination von Moq und HttpContextBase. –

+0

Der Trick ist, dass die Berechtigungen auf MachineKeys-Ordner nicht RSA festgelegt werden müssen. Der Beitrag von Ayende macht das nicht völlig offensichtlich, wenn Sie nicht vorsichtiger Leser sind. –

+0

So froh, dass ich das gefunden habe, ugh, zwei Tage und endlich behoben: D. Ich wollte nur noch ein paar Referenzen hinzufügen, die mir geholfen haben, falls jemand anderes dazu kommt: http://ansaurus.com/question/3154345-strong-name-keys-on-windows-7 | http://msdn.microsoft.com/en-us/library/bb909654(v=vs.90).aspx hat mir wirklich geholfen, die Reparatur, die für mich arbeitete, auf Null zu bringen. –

Antwort

9

MoQ verwendet Castle DynamicProxy zur Generierung von Mocks zur Laufzeit. Rhino Mocks verwendet die gleiche Bibliothek für den gleichen Zweck. Wenn Sie hier überprüfen:

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

werden Sie sehen, dass das Problem eine der Berechtigungen Schlüsselspeicher an der Maschine. Unabhängig davon, welches Benutzerkonto ausgeführt wird, muss der Test die Berechtigung zum Erstellen und Löschen von Schlüsseln im Geschäft besitzen.

Sie können viel mehr Informationen zu diesem Thema finden Sie hier: http://groups.google.co.uk/group/RhinoMocks/browse_thread/thread/26df68ff01567509/5ddebf407228edc4

+0

Ich überprüfte die Berechtigungen für RSA und Crypto-Ordner, aber irgendwie ist es nicht für Maschinenschlüssel eingestellt. Danke Will. –

+0

Das liegt daran, dass der MachineKeys-Ordner wichtig ist und keine Berechtigungen erbt! –

0

Check out this blog post von Scott Hanselman - es ist ein wenig alt, aber die MvcMockHelpers er zeigt dort werden Sie wahrscheinlich eine gute Vorstellung davon, wie zu tun, was du tust.

-1

Sie sollten die this video on asp.net Website ansehen, die ein erstaunliches Beispiel für die Implementierung zeigt.

+2

Signieren ist das Problem hier, nicht wie man in mvc. – Will

+0

ok einverstanden mein Fehler –