运行单元测试时出现奇怪的.net 4.0异常

时间:2010-04-22 22:47:06

标签: unit-testing .net-4.0 moq

尝试使用带有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,但是他们对修复它的方法不太清楚......

任何人有任何想法吗?

3 个答案:

答案 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

Security-Transparent Code, Level 2

AllowPartiallyTrustedCallersAttribute Class

答案 2 :(得分:3)

最新版本的Moq已修复此问题(实际上它是DynamicProxy中的修复)。 请试试最新的v4 Beta。

http://moq.me