我的目标是静态合约检查以捕获/避免传递空值,而且我是合约的新手。
我在方法(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
}
}
以下是我在测试项目中的设置:
答案 0 :(得分:0)
要使静态检查生效,您需要在“项目属性/代码合同”选项卡中明确启用它们。整个部分包含专用于配置静态检查的复选框。
在您的情况下,请确保为包含Link类的项目启用它。