我开始在单元测试中使用Moles,并且在文档上有点挣扎。
我想骚扰DateTime.Now。
如果你环顾旧的方法是添加对mscorlib的引用,然后为它添加一个stubx文件(添加新项目 - > Stubs和Moles For Testing)。
不推荐使用'Stubs and Moles for Testing'模板,而您只需要右键单击一个引用并选择'Add moles assembly',这很好。
VS2010不允许您直接向mscorlib添加引用,因为我们引用了“System”,这是可以的,因为我可以在对象浏览器中看到DateTime作为此命名空间的一部分。
如果我为系统参考添加了一个moles程序集并重建,我仍然无法解析MDateTime。
有什么建议吗?
答案 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一起使用。