[英]NullPointerException when Mockito mocking ObjectOutputStream.writeObject?
我正在編寫一個jUnit測試,檢查類將什么寫入ObjectOutputStream。
具體來說,我正在檢查一個類是否正在以某種類型調用writeObject:
ObjectOutputStream out = mock(ObjectOutputStream.class);
out.writeObject(new Something());
verify(out).writeObject(isA(Something.class));
但是Java抱怨writeObject
內部存在NullPointerException。
我需要存根解決此問題嗎?
Mockito無法做到這一點。 根據ObjectOutputStream javadocs , writeOutput
方法是最終的:
public final void writeObject(Object obj) throws IOException
在內部,Mockito實際上通過創建Proxy來模擬這些對象,該Proxy動態覆蓋ObjectOutputStream。 但是,由於writeObject
方法是最終的,因此您無法覆蓋或模擬它,而Java會調用原始方法。 這被列為Mockito的限制之一 。
盡管您可以針對writeObjectOverride
進行驗證,但更好的選擇實際上是重構代碼,以直接使用ObjectOutput接口而不是ObjectOutputStream接口。 ObjectOutputStream實現ObjectOutput,而Mockito可以模擬接口的任何方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.