簡體   English   中英

在Mockito中存根返回零的函數

[英]Stubbing Out a Null-Returning Function in Mockito

我一直在使用JUnit和Mockito來測試特定的網絡模塊如何影響其輸入和輸出流。 為了方便測試,我創建了一組模擬網絡對象流(即ObjectInputStream的實例和ObjectOutputStream的實例),並以類似於以下代碼段的方式列出了要測試的方法:

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import static org.mockito.Mockito.*;
import org.junit.Test;  

public class NetworkTester
{
    @Test
    public void ModuleRespondsToServerRequest() throws Exception
    {
        ObjectInputStream mockClientIn = mock(ObjectInputStream.class);
        ObjectOutputStream mockClientOut = mock(ObjectOutputStream.class);

        when(mockClientIn.readObject()).thenReturn("Sent from Server");

        // Initialize module and connect it to the network...

        verify(mockClientOut, timeout(100).atLeastOnce()).writeObject(isNotNull());
    }
}

但是,當我嘗試編譯並運行此代碼時,在“ when(mockClientIn.readObject())。thenReturn(“從服務器發送”);“行處得到空指針異常。 我相信這是由於以下事實引起的:當在存根對象上調用“ readObject()”函數時,它會返回空指針,但是我不知道是否有可能繞過此行為。

有什么方法可以使用Mockito存根該函數(或類似的null返回函數)? 在此先感謝您的幫助。

Mockito無法模擬readObject()因為它是最終的。 您可以嘗試使用PowerMockito或考慮重新設計代碼以簡化可測試性。 此處查看有關該主題的討論。

如果執行視圖源,則將注意到該方法是最終的。

public final Object readObject()

嘗試用另一個對象包裝依賴項。 請參閱: 最終方法模擬

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM