2

私は、特定のネットワークモジュールがその入力ストリームと出力ストリームにどのように影響するかをテストするために、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( "Sent from Server");」の行でnullポインター例外が発生します。これは、「readObject()」関数がスタブされたオブジェクトで呼び出されたときにnullポインターを返すという事実が原因であると思いますが、この動作をバイパスできるかどうかはわかりません。

Mockitoを使用してこの関数(または同様のnullを返す関数)をスタブする方法はありますか?よろしくお願いします。

4

2 に答える 2

2

ソースを表示すると、メソッドが最終的なものであることがわかります。

public final Object readObject()

依存関係を別のオブジェクトでラップしてみてください。参照: Final メソッドのモック

于 2013-02-13T22:09:27.237 に答える
2

最終的なものであるため、 Mockito はモックできませんreadObject()PowerMockitoを試すか、テストを容易にするためにコードを再設計することを検討してください。このトピックに関する議論はこちらをご覧ください。

于 2013-02-13T22:09:10.770 に答える