2012-12-10 85 views
0

我需要一種方法來僞造Typemock的DateTime.Parse,並使用任何參數調用時返回相同的日期。TypeMock僞造DateTime.Parse

我有一個數據庫字段,存儲加載的字符串被解析爲日期時加載。保存數據的類有一個Load()方法在那裏拷貝DB數據到其性質,解密什麼是加密,並做一些基本的驗證,如:

public class BusinessObject{ 
    public DateTime ImportantDate{get;set;} 
... 
    public void Load(DBObject dbSource){ 
     ... 
     ImportantDate = DateTime.Parse(DecryptionService.Decrypt(dbSource.ImportantDate)); 
    } 
} 

運行一切運作良好。

我正在嘗試使用TypeMock使用Load方法將一些假數據加載到BusinessObject中進行單元測試。 BusinessObject有太多的屬性,不能從XML反序列化,但DBObject可以,所以我存儲了一些表示有效數據的XML。

它一直運行良好,直到調用DecryptionService來解密數據 - 它不起作用,因爲我的開發機器沒有在加密過程中使用的數據庫證書。我無法僅僅爲了測試而在我的機器上獲得這些信息,那將是一次安全漏洞。

我將此添加到我的單元測試:

Isolate.Fake.StaticMethods<DecryptionService>(Members.ReturnRecursiveFakes); 
Isolate.WhenCalled(() => DecryptionService .Decrypt(null)).WillReturn("***"); 

Isolate.Fake.StaticMethods<DateTime>(Members.ReturnNulls); 
Isolate.WhenCalled(() => DateTime.Parse("***" /*DateStr*/)).WillReturn(DateTime.Now.AddYears(2)); 

其中DecryptionService是僞造的作品,社會保障等敏感字符串「解密」,但無論我給的日期時間我還是什麼參數的第一部分得到一個例外或其他(ArgumentNullException:String引用未設置爲一個對象的實例,如果DateStr爲空,出現FormatException時,它的「*」)

如何(如果)可以覆蓋DateTime.Parse與typemock使它會返回有效的DateTime並傳遞任何無效的參數?

回答

3

我的名字是Nofar,我來自Typemock的支持團隊。

DateTime.Parse不是爲了在WhenCalled API的支持,所以僞造它的返回值,你需要從你的類的方法來包裝它,例如:

public class BusinessObject 
{ 
    public DateTime Load (string s) 
    { 
    return DateTime.Parse(s); 
    } 
} 

你測試會看像這樣:

[TestMethod] 
    public void TestMethodDateTime() 
    { 
     BusinessObject b = new BusinessObject(); 
     DateTime now= DateTime.Now.AddYears(2); 

     Isolate.WhenCalled(()=>b.Load(null)).WillReturn(now); 

     Assert.AreEqual(now, b.Load(null)); 
    } 

支持WhenCalled API中的DateTime.Parse在我們的待辦事項中。

請隨時通過郵件在[email protected]

Nofar Typemock支持

與我們聯繫