尝试使用MoQ时出现StrongNameKeyPair问题

时间:2010-03-11 14:26:06

标签: exception moq httpcontext strongname argumentexception

我正在尝试为单元测试创​​建一个模拟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(布尔   export,Byte [] array,String   容器)   System.Reflection.StrongNameKeyPair.get_PublicKey()   System.AppDomain.InternalDefineDynamicAssembly(的AssemblyName   name,AssemblyBuilderAccess访问权限,   String dir,证据证据,   PermissionSet requiredPermissions,   PermissionSet optionalPermissions,   PermissionSet rejectedPermissions,   StackCrawlMark&安培; stackMark,   IEnumerable`1   unsafeAssemblyAttributes)   System.AppDomain.DefineDynamicAssembly(的AssemblyName   name,AssemblyBuilderAccess访问)   Castle.DynamicProxy.ModuleScope.CreateModule(布尔   signStrongName)   Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName()   Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(布尔   isStrongNamed)   Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope   modulescope,String name,Type   (blah blah snip)

我用谷歌搜索,这里的建议似乎不起作用(更改RSA文件夹安全设置等)http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158

我认为这是正确的,因为HttpContextBaseSystem.Web.Abstraction的一部分,这是一个签名的程序集。 Moq实际上会尝试签署动态程序集,并且失败了吗?

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:0)

查看Scott Hanselman撰写的this blog post - 它有点旧了,但是他显示的 MvcMockHelpers 可能会让你很好地了解如何完成你正在做的事情。< / p>

答案 2 :(得分:-1)

您应该观看显示实施示例的this video on asp.net网站。