Exception 尝试使用MoQ时出现StrongNameKeyPair问题

Exception 尝试使用MoQ时出现StrongNameKeyPair问题,exception,moq,httpcontext,strongname,argumentexception,Exception,Moq,Httpcontext,Strongname,Argumentexception,我正在尝试为单元测试创建一个模拟HttpContextBase var fakePrinciple = new GenericPrincipal( new GenericIdentity(userId), rolesList.ToArray()); var mockHttpContext = new Mock<HttpContextBase>(); mockHttpContext.Setup(t => t.U

我正在尝试为单元测试创建一个模拟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;
var fakePrinciple=新的GenericPrincipal(
新的GenericEntity(用户ID),
rolesList.ToArray());
var mockHttpContext=new Mock();
mockHttpContext.Setup(t=>t.User).Returns(fakePrinciple);
HttpContextBase mockedContext=mockHttpContext.Object;
单元测试在最后一个语句中失败

引发异常: System.ArgumentException:无法删除 获取的公钥 strong名称密钥对

System.Reflection.StrongNameKeyPair.nGetPublicKey(布尔值 已导出,字节[]数组,字符串 (集装箱) System.Reflection.StrongNameKeyPair.get_PublicKey() System.AppDomain.InternalDefinedDynamicAssembly(AssemblyName 名称,AssemblyBuilderAccess访问, 字符串目录,证据, PermissionSet requiredPermissions, 权限设置选项权限, PermissionSet拒绝许可, stackMark和stackMark, IEnumerable`1 不安全(属性) System.AppDomain.DefinedDynamicAssembly(AssemblyName 名称,AssemblyBuilderAccess访问权限) Castle.DynamicProxy.ModuleScope.CreateModule(布尔值 签名(姓名) Castle.DynamicProxy.ModuleScope.ActaindynamicModulewithStrongName() Castle.DynamicProxy.ModuleScope.ActainDynamicModule(布尔值 Isstrongname) Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(ModuleScope modulescope,字符串名称,类型 (胡说八道)

我在谷歌上搜索,这里的建议似乎不起作用(更改RSA文件夹安全设置等)


因为
HttpContextBase
System.Web.Abstraction
的一部分,这是一个已签名的程序集。Moq实际上会尝试对动态程序集进行签名,但失败了,这是对的吗?

请查看Scott Hanselman的文章-它有点旧了,但是他在那里显示的MvcMockHelpers可能会给您一个提示关于如何完成您正在做的事情,这是一个好主意。

您应该观看展示了一个惊人的实现示例的网站。

MoQ使用Castle DynamicProxy在运行时生成模拟。Rhino模拟使用相同的库用于相同的目的。如果您选中此处:

您将看到问题是计算机密钥存储的权限之一。运行测试的任何用户帐户都必须具有在存储中创建和删除密钥的权限

您可以在此处找到有关此问题的更多详细信息:

FWIW,我已经用Moq模拟HttpContextBase很多次了,从来没有遇到过这个问题。不管你的问题是什么,Moq和HttpContextBase的结合不是通用的。诀窍是需要在MachineKeys文件夹而不是RSA上设置权限。如果你不是细心的读者,Ayende的帖子不会让这一点变得完全明显。所以很高兴我发现了这个问题,呃,两天之后终于解决了:D。我只是想添加一些对我有帮助的参考资料,以防其他人遇到这种情况:|真的帮助我专注于对我有效的修复。这里的问题是签名,而不是如何在mvc中模拟。我检查了RSA和Crypto文件夹的权限,但不知怎的,它没有为Machin设置谢谢威尔。那是因为MachineKeys文件夹很重要,它不继承权限!