2012-05-28 170 views

回答

7

獲得私有字段或方法,一般的方法是使用反射。但是,單元測試框架包含一個幫助類,PrivateObject,以使這更容易。請參閱docs。一般來說,當我用這個,我已經結束了做一個擴展方法如下所示:

public static int GetPrivateField(this MyObject obj) 
{ 
    PrivateObject po = new PrivateObject(obj); 
    return (int)po.GetField("_privateIntField"); 
} 

如果你需要得到私人領域在一個靜態類,但是,你需要去直接反思。

+0

謝謝@mike我已經嘗試過了,效果不錯。 – Michelle

+0

@Michelle不客氣。 –

+1

您可以使用['PrivateType'](http://msdn.microsoft.com/zh-cn/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx)對象獲取並設置靜態類中的私有字段(與PrivateObject類型相反!) – stuartd

2

不,如果你正在寫好單元測試,你不應該需要訪問任何私人領域。單元測試應該測試,當傳入一組已知的值時,方法會以某種方式行事(通過返回適當的數據或以已知的方式使用依賴關係)。

如果您想測試以後的版本,請使用依賴注入將依賴關係注入到您正在測試的類中。您將完全訪問這些測試的依賴關係。

+0

謝謝你們我沒有意識到我違反了TDD原則。謝謝 – Michelle

+2

問題是這是否可能,而不是這是否是最佳做法。 – stuartd

+0

儘管我理論上同意Justin,但實際上經常需要編寫單元測試,以找出不能更改或不能輕易更改的次優代碼。 – Dave