2012-07-17 120 views
0

所以這是越來越悲慘。我試圖測試一些微軟的垃圾會員資格庫,他們只是很糟糕。我設法將一個接口放在Membership類的前面,然後遇到了實現ProfileBase的類的問題,並且我設法爲它創建了一個接口,所以愚蠢的靜態創建方法可能會被模擬,但我怎樣才能嘲笑profileBase中的屬性這是你使用那個愚蠢的類的唯一原因。認真的MicroSoft在這個時代不能修復他們的代碼,所以你可以爲它寫一個怪異的單元測試。多可憐。這是我到目前爲止已經試過從ProfileBase嘲諷屬性

mockProfileFactoryService = new Mock<IProfileFactoryService>(); 
mockProfileFactoryService.Setup(x => x.GetUserProfile(It.IsAny<string>())).Returns(new DummyUserProfile(){FirstName = ""}); 

這是德僞類是什麼樣

public class DummyUserProfile: UserProfile 
{ 
    public new String FirstName { get; set; } 
    public new String LastName { get; set; } 
} 

我想我可以隱藏屬性名字和姓氏的這種方式,但測試只是吹起來我可以看到它試圖訪問實際的UserProfile類中的屬性。

有誰知道我該怎麼做?認真地說 - 當他們從ProfilBase類繼承時,其他人在做什麼?

我也試過解壓縮和接口使用reshaper,似乎工作,但當我嘲笑它,然後試圖說.Return(profileMock.object)它爆炸說它不能轉換和IUserProfile到UserProfile?在ARG之前我從未見過!

我的意思是 - 我討厭改變我的代碼,使其可測試,即檢查這樣的空值或愚蠢的廢話,但我會如果我可以,在這種情況下,你不能做任何事情,因爲你對此做了什麼?

base["FirstName"] 

回答

0

因此,一個良好的咆哮後,我在執行力度

public string GetPropertyValue(string userName, string propertyName) 
{ 
    return (string)GetUserProfile(userName).GetPropertyValue(propertyName); 
} 

在我IProfileFacotryService想出了這個

string GetPropertyValue(string userName, string propertyName); 

然後但我不激動與 - 我一般不喜歡創造除了調用原始代碼之外的任何其他接口,我不認爲這真的是這樣做 - 我的意思是這樣,但意義似乎不太清楚?無論如何 - 我只是覺得有一個更好的方法來做到這一點,所以雖然這工作,我不介意一個更好的解決方案,如果存在。

顯然,我現在可以嘲笑這一點,但在我的代碼,我不得不說

taskBoardModel.Name = profileFactoryService.GetPropertyValue(userName, "FirstName"); 

我寧願說

taskBoardModel.Name = profileFactoryService.GetUserProfile(userName).FirstName; 

反正 - 呸騙人的鬼話!