我試圖寫爲使用作爲依賴的AsynchronousSocketChannel
一類單元測試:覈實的Mockito錯重載方法
final AsynchronousSocketChannel channel = mock(AsynchronousSocketChannel.class);
final Client client = new Client(channel);
client.read();
verify(channel).read(isA(ByteBuffer.class), eq(client), isA(CompletionHandler.class));
然而,我收到以下錯誤:
Invalid use of argument matchers!
5 matchers expected, 3 recorded:
發生這種情況是因爲AsynchronousSocketChannel.read
有4個不同的重載版本,出於某種原因verify
不斷選擇帶有5個參數的版本,即使我傳遞的匹配器與版本read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
匹配。
在this answer它的建議,這可能確實是與實際編譯器的問題,這有可能指示編譯器選擇合適的重載方法具有類似
verify(channel).read(
ArgumentMatchers.<ByteBuffer>isA(ByteBuffer.class),
ArgumentMatchers.<Client>eq(client),
ArgumentMatchers.<CompletionHandler>isA(CompletionHandler.class)
);
,但這樣做我不斷收到同樣的錯誤。
任何想法,如果有可能使這項工作?否則,我相信我可以使用5個參數重載,通過null
作爲額外的2個參數,但這對我來說有點像黑客。
或者,更新版本的Mockito 2允許*嘲笑**最終**事物。但這是一個需要特殊「啓用」的實驗性功能。請參閱http://static.javadoc.io/org.mockito/mockito-core/2.10.0/org/mockito/Mockito.html#39 – GhostCat
謝謝!這確實是問題。 – swahnee