2011-05-11 28 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