传递给Contract.Requires的方法的空值没有警告

时间:2015-03-10 23:36:10

标签: c# code-contracts

我的目标是静态合约检查以捕获/避免传递空值,而且我是合约的新手。

我在方法(Contract.Requires(param!=null))中使用Link ctor并作为测试,我使用null参数调用它,我希望它能警告我,但事实并非如此。

单元测试通过,因此运行时行为与预期一致。

为什么不警告我进入函数的空值不能取空值?

待测班级:

using System.Diagnostics.Contracts;

public class Link
{

    private readonly Shape origin;

    private readonly Shape destination;
    public Link(Shape origin, Shape destination)
    {
        Contract.Requires<ArgumentException>(origin != null);
        Contract.Requires<ArgumentException>(destination != null);
        this.origin = origin;
        this.destination = destination;
    }

    public string OriginID()
    {
        return origin.ID;
    }

    public string DestinationID()
    {
        return destination.ID;
    }

}

单元测试:

    using Moq;
    using NUnit.Framework;
    using Simmons.UI.Controls.Diagram;

    namespace Unit
    {
        /// <summary>
        /// A test class for Link
        /// </summary>
        [TestFixture()]
        public class LinkShould
        {
          private Link link;

          [Test()]
          [ExpectedException(typeof(ArgumentException))]
          public void ExplodeWhenLinkIsCreatedWithNulls()
          {
            //set up
            link = new Link(null, null); // No warning on this line
          }    
    }

以下是我在测试项目中的设置: enter image description here

1 个答案:

答案 0 :(得分:0)

要使静态检查生效,您需要在“项目属性/代码合同”选项卡中明确启用它们。整个部分包含专用于配置静态检查的复选框。

在您的情况下,请确保为包含Link类的项目启用它。