![](/img/trans.png)
[英]How do I mock a private static final field initialized via a private constructor using Powermock and Mockito?
[英]Mock final private variable using Mockito/Powermock framework
我正在嘗試模擬一個如下所示的類
public class MessageContainer {
private final MessageChain[] messages;
MessageContainer(final int numOfMessages, final MessageManagerImpl manager, final Object someOtherStuff) {
messages = new MessageChain[numOfMessages]
// do other stuff
}
public void foo(final int index) {
// do something
messages[index] = getActiveMessage();
}
}
我的測試代碼如下:
@Test
public void testFoo() {
MessageContainer messageContainer = Mockito.mock(MessageContainer.class);
Mockito.doCallRealMethod().when(messageContainer).foo(anyIndex);
}
我收到了NullPointerException,因為'messages'為null。 我試圖使用@InjectMocks注入模擬,但是不支持這種情況,因為並非構造函數的每個參數都聲明為成員。
我還嘗試通過使用WhiteBox設置“郵件”字段
Whitebox.setInternalState(messageContainer, MessageChain[].class, PowerMockito.mock(MessageChain[].class));
但由於setInternalState僅支持(對象,對象,對象)而不支持對象[],因此出現了編譯錯誤。
有沒有可能模擬私人最終領域的方法?
預先謝謝你們。
根據您的編輯和評論,我想模擬此類並驗證該方法已被調用就足夠了。
如果它是第三方代碼,則應僅依靠其方法簽名,該方法簽名包含該類的公共API。 否則,您會將測試與無法控制的內容緊密結合在一起。 當他們決定使用Collection
而不是數組時,您會怎么做?
只需寫:
MessageContainer container = mock(MessageContainer.class);
//Your code here...
verify(container).foo(obj);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.