尝试使用带有moq 3.1的VS2010下的.net 4.0运行单元测试时,我收到以下异常。
尝试安全透明方法 'SPPD.Backend.DataAccess.Test.Specs_for_Core.When_using_base.Can_create_mapper()' 访问安全关键方法 'Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(System.Object的)' 失败。
大会 “SPPD.Backend.DataAccess.Test, 版本= 1.0.0.0,文化=中立, PublicKeyToken = null'标有 该 AllowPartiallyTrustedCallersAttribute程序, 并使用2级安全性 透明度模型。 2级 透明度导致所有方法 AllowPartiallyTrustedCallers 组件成为安全 默认是透明的,可能是 这个例外的原因。
我正在进行的测试非常简单,看起来如下:
[TestMethod]
public void Can_create_mapper()
{
this.SetupTest();
var mockMapper = new Moq.Mock<IMapper>().Object;
this._Resolver.Setup(x => x.Resolve<IMapper>()).Returns(mockMapper).Verifiable();
var testBaseDa = new TestBaseDa();
var result = testBaseDa.TestCreateMapper<IMapper>();
Assert.IsNotNull(result); //<<< THROWS EXCEPTION HERE
Assert.AreSame(mockMapper, result);
this._Resolver.Verify();
}
我不知道这意味着什么,我一直在环顾四周,并且在这个主题上找不到什么。我发现的最接近的参考是http://dotnetzip.codeplex.com/Thread/View.aspx?ThreadId=80274,但是他们对修复它的方法不太清楚......
任何人有任何想法吗?
答案 0 :(得分:19)
在引用项目的AssemblyInfo.cs中添加以下行
[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]
答案 1 :(得分:4)
MSDN:“.NET Framework版本4引入了影响AllowPartiallyTrustedCallersAttribute属性行为的新安全规则(请参阅安全透明代码,级别2)。在.NET Framework 4中,所有代码都默认为安全性-transparent,即部分信任。但是,您可以注释单个类型和成员,为其分配其他透明属性。“
我自己没有遇到过这个问题,但也许你已经从3.5项目中导入了一些东西。
查看以下链接:
Security Changes in the .NET Framework 4
答案 2 :(得分:3)
最新版本的Moq已修复此问题(实际上它是DynamicProxy中的修复)。 请试试最新的v4 Beta。