JavaでオーバーロードされたメソッドをMockしようとしても、うまくMockできないことがある。
どちらのメソッドを呼べばいいかわからないからだと思う。(たぶん)
下記のようなメソッドをMockしたい場合の対応。
public String doSomething(String arg1) public String doSomething(String arg1, String arg2)
仮引数を明記する
オーバーロードされたメソッドをMockするには、Closureの仮引数を明記することで、対応可能。
// これだとうまくMockされない doSomething(*_) >> {'もっくできないー'} // 仮引数を明記するとうまくいく doSomething(*_) >> {param1 -> '引数1個の方'} doSomething(*_) >> {param1, param2 -> '引数2個の方'}
MissingMethodException
なお同じテストメソッド内で、両方のメソッドを呼ぼうとすると MissingMethodException が発生することがある。
※Mockしているのが片方だけであっても発生する
groovy.lang.MissingMethodException: No signature of method
これはMockしている引数を明示すると解決できる。
doSomething(_ as String) >> {param1 -> '引数1個の方'} doSomething(_ as String, _ as String) >> {param1, param2 -> '引数2個の方'}