【发布时间】:2010-03-11 14:26:05
【问题描述】:
我正在尝试为单元测试创建一个模拟 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 导出,字节 [] 数组,字符串 容器) System.Reflection.StrongNameKeyPair.get_PublicKey() System.AppDomain.InternalDefineDynamicAssembly(AssemblyName 名称、AssemblyBuilderAccess 访问权限、 字符串目录,证据证据, PermissionSet requiredPermissions, PermissionSet optionalPermissions, PermissionSet 拒绝权限, StackCrawlMark 和 stackMark, IEnumerable`1 unsafeAssemblyAttributes) System.AppDomain.DefineDynamicAssembly(AssemblyName 名称,AssemblyBuilderAccess 访问) Castle.DynamicProxy.ModuleScope.CreateModule(布尔 签名强名称) Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName() Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(布尔 isStrongNamed) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope 模块范围,字符串名称,类型 (废话少说)
我用谷歌搜索,这里的建议似乎不起作用(更改 RSA 文件夹安全设置等)http://groups.google.com.br/group/castle-project-users/browse_thread/thread/85685cf32a795158
我认为这是正确的,因为HttpContextBase 是System.Web.Abstraction 的一部分,它是一个签名程序集。 Moq 实际上会尝试对动态程序集进行签名,但失败了?
【问题讨论】:
-
FWIW,我用 Moq 模拟 HttpContextBase 很多次,从来没有遇到过这个问题。无论您的问题是什么,Moq 和 HttpContextBase 的组合都不通用。
-
诀窍是需要在 MachineKeys 文件夹而不是 RSA 上设置权限。如果您不仔细阅读,来自 Ayende 的帖子并不能完全清楚地说明这一点。
-
很高兴我找到了这个,呃,两天终于修好了:D。只是想添加一些对我有帮助的参考资料,以防其他人遇到这种情况:ansaurus.com/question/3154345-strong-name-keys-on-windows-7 | msdn.microsoft.com/en-us/library/bb909654(v=vs.90).aspx 真的帮助我解决了对我有用的问题。
标签: exception moq httpcontext strongname argumentexception