2016-09-17 155 views
3

如何通過PowerMock訪問以下私有靜態字段foo。我只想驗證Foo例如不是null,我不能通過添加getter來重構代碼。PowerMock訪問私有靜態成員

public class Bar{ 

    private static Foo foo = new Foo(); 


} 

我嘗試使用這個,但它不工作:

Foo foo = Whitebox.getInternalState(bar, "foo"); 
+1

試試'Whitebox.getInternalState(Bar.class,「foo」)'? –

+0

它的工作原理。非常感謝 –

回答

0

驗證一個私人領域具有一定的內容轉換到:測試內部實現細節。當然,這是可能的,但它也會使你的測試非常脆弱 - 對生產代碼的輕微改變(如:重構),並且測試失敗;儘管您可能沒有更改您的班級的合同

而你看 - 我很肯定它不知何故使你的班級在測試中有所不同,如果該字段爲空或不是。含義:在這兩種情況下,被測試的班級的行爲會有所不同。

因此,我的建議:看看你是否可以在這裏避免Powermock - 通過找到其他方法來「斷言」生產類中的某些東西來測試該字段是否爲空。

說真的:如果該字段的內容不會影響任何您的類正在測試中的可觀察行爲 - 該字段的目的是什麼?