将Moles与DateTime一起使用

时间:2011-05-11 09:24:12

标签: unit-testing moles pex-and-moles

我开始在单元测试中使用Moles,并且在文档上有点挣扎。

我想骚扰DateTime.Now。

如果你环顾旧的方法是添加对mscorlib的引用,然后为它添加一个stubx文件(添加新项目 - > Stubs和Moles For Testing)。

不推荐使用'Stubs and Moles for Testing'模板,而您只需要右键单击一个引用并选择'Add moles assembly',这很好。

VS2010不允许您直接向mscorlib添加引用,因为我们引用了“System”,这是可以的,因为我可以在对象浏览器中看到DateTime作为此命名空间的一部分。

如果我为系统参考添加了一个moles程序集并重建,我仍然无法解析MDateTime。

有什么建议吗?

1 个答案:

答案 0 :(得分:15)

对于mscorlib的Moles,您需要直接右键单击测试项目的References。您将为mscorlib添加Moles程序集。 然后,将using System.Moles;添加到您的测试类中,因为您需要Moles of System.DateTime(实际上,您需要更多)。

[TestMethod()]
[HostType("Moles")]
public void DateTimeMolesTest()
{
    DateTime date = new System.DateTime(2000, 1, 1, 2, 3, 4, 5);
    MDateTime.NowGet = () => date;
    Assert.AreEqual(date, DateTime.Now);
}

如果您运行此测试,它将失败,因为您需要添加:

using Microsoft.Moles.Framework;
[assembly: MoledType(typeof(System.DateTime))]

然后,您的测试将成功。 不要忘记Moles不能与某些特殊类型的mscorlib一起使用。