2

私は次の呼び出しをモックしようとしています:

s.socket().bind(new InetSocketAddress(serverIPAddress_, serverPort_), 0);

したがって、これが予測可能な方法で失敗したときに、コードの残りの部分が何をするかをテストできます。私はこれをテストケースで使用します。

ServerSocketChannel ssc = mock(ServerSocketChannel.class);
when(ServerSocketChannel.open()).thenReturn(ssc);
doNothing().when(ssc.socket().bind(any(), anyInt()));

ただし、上記は次のコマンドではコンパイルされません。

[javac] /home/yann/projects/flexnbd/src/uk/co/bytemark/flexnbd/FlexNBDTest.java:147: cannot find symbol
[javac] symbol  : method bind(java.lang.Object,int)
[javac] location: class java.net.ServerSocket
[javac]       doNothing().when(ssc.socket().bind(any(), anyInt()));
[javac]                                    ^
[javac] 1 error

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

1

ServerSocketObjectとintを受け取るバインドオーバーロードはありません。SocketAddressaとintをとるオーバーロードがあります。私はMockitoを使用していませんが、次のものが必要になると思います。

doNothing().when(ssc.socket().bind(isA(ServerSocket.class), anyInt()));

編集:最新のエラーは、whenメソッドにvoidを渡そうとしているためです。ドキュメントには、「モックのvoidメソッドはデフォルトでは何もしない」と記載されているため、この行はまったく必要ない場合があります。

于 2010-07-08T10:41:24.280 に答える
1

の署名bindbind(java.net.SocketAddress)またbind(java.net.SocketAddress,int)はですが、あなたはそれにを与えていますjava.lang.Object

によって返されるランタイムタイプがであることが確実な場合any()java.net.SocketAddress、それをキャストできます。

ssc.socket().bind((SocketAddress)any(), anyInt())

(もちろん、そうでない場合は、を取得しClassCastExceptionます。)

于 2010-07-08T10:41:55.627 に答える