我试图摆脱所有的DateTime.Now方法调用,并用我自己的GetNow()方法替换它们,有时可能返回固定的日期用于测试目的.
我如何强制执行以后没有人添加DateTime.Now电话?我可以使用NDepend或StyleCop在我的持续集成服务器上进行检查吗?
首先,DateTime.Now是一个财产.
这意味着您不需要在调用后放置括号.
其次,如果出于测试目的,您指的是像NUnit这样的框架,您可能需要查看Microsoft Moles,它允许您在测试时使用自己的自定义实现替换任何静态方法调用.哎呀,很酷:
[Test]
[ExpectedException (typeof (Y2KBugException))]
public void TestY2KBug ()
{
MDateTime.NowGet = () => new DateTime (2001, 1, 1);
Bomb.DetonateIfY2K ();
}
public static class Bomb {
public static void DetonateIfY2K ()
{
if (DateTime.Now == new DateTime (2001, 1, 1))
throw new Y2KBugException (); // take cover!
}
}
Run Code Online (Sandbox Code Playgroud)
使用NDepend,编写此规则非常容易:
// <Name>Forbid DateTime.Now, use xxx.GetNow() instead</Name>
WARN IF Count > 0 IN
SELECT METHODS WHERE
IsDirectlyUsing "OPTIONAL:System.DateTime.get_Now()"
Run Code Online (Sandbox Code Playgroud)
注意:
另外,要生成原始查询...
SELECT METHODS WHERE
IsDirectlyUsing "OPTIONAL:System.DateTime.get_Now()"
Run Code Online (Sandbox Code Playgroud)
...只需右键单击DateTime.get_Now()并选择直接使用我的Select方法....

| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |