2011-05-06 150 views
2

這樣的狀態的方法的單元測試,我有以下的(使用C#)的問題:關於改變私人領域

我有兩個私人領域中的一類,一個是節省了場的原始狀態還有一個保存更新的狀態。

我現在想編寫一個基本上採用原始狀態的方法,將其複製到更新的狀態並更改它的一些內容。

到目前爲止,我已經實現,作爲一個無效的方法,只是改變字段的狀態(如果需要)。這些字段稍後將被另一種方法使用。

我不認爲我會有任何實施的麻煩,但我想爲這種方法編寫單元測試(與MSTest),並不能看到我可以如何正確地測試這個。

我真的需要測試的是給定輸入參數的字段內容與原始狀態相比是否發生了變化。由於這兩個字段都是私有的,我不能訪問原始狀態來爲單元測試設置一個值,也不能訪問這些字段以用於任何斷言的比較。

最簡單的方法是公開所有這些領域與公共屬性,但我真的沒有用於公共屬性除了單元測試。另一種方法是重寫方法以返回更新後的狀態,但這仍然不能幫助我將原始狀態設置爲測試所需的狀態。

關於如何解決這個問題的任何想法或最佳實踐?

回答

3

使用PrivateObject.GetField()檢索該字段的最終狀態。 (privateObject members

這比修改API只是爲了使其可測試性更好。

+0

我認爲這是我正在尋找的。我實際上改變了原來的狀態並返回更新後的狀態,這使得它可以自行測試。我不確定是否對該解決方案感到滿意,所以我可能會返回到前一個迭代,並更新測試以使用PrivateObject。無論如何,這是非常好的知道未來的測試。 – 2011-05-16 09:06:21

2

什麼可見如果字段被正確複製,會發生變化嗎?推測它會影響某些方式中對象的行爲......所以這是測試的理想之選。

爲了可測試性,有時可能需要添加內部幫助器方法(與InternalsVisibleTo一起使用),但理想情況下,測試對可見行爲/狀態的更改是不太脆弱的方法。

+0

直到很久以後,當另一個方法使用這些字段寫出一個xml文件時,可見的變化才顯而易見。基本上有方法來讀取原始的XML,對特定的節點進行更改,並寫出更新的XML。我設法構建它,以便我可以自己測試所有的方法,但是這個方法在兩者之間,並且在當前狀態下需要檢索原始狀態的方法和寫出更改以進行更改的方法可見。 – 2011-05-06 09:00:56