2011-05-11 41 views
4

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

我想摩尔DateTime.Now。

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

'Stubs and Moles for Testing'模板已被弃用,您只需要右键单击一个引用并选择'Add moles assembly',这很好。

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

如果我为系统引用添加摩尔组件并重建,我仍然无法解析MDateTime。

有什么建议吗?

回答

15

对于mscorlib的痣,您需要直接右键单击您的测试项目的参考。您将有为mscorlib添加摩尔组件。 然后,将using System.Moles;添加到您的测试类,因为您需要System.DateTime的Moles(实际上,您需要更多一点)。

[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))] 

然后,测试会成功。 不要忘记,痣不能用于某些特殊类型的mscorlib。

+0

完美,谢谢! – Mark 2011-05-12 08:59:31

+0

我尝试了“为mscorlib添加痣集合”,但是当它构建时给了我成千上万的错误。大多数是由于缺少程序集引用而导致的type/namespace解决错误。任何想法? – smwikipedia 2012-11-12 08:51:03

+0

这是一个很好的答案+1 – Rahul 2015-04-07 12:52:32