ScalaTest 1.9.1 の MockitoSugar は使うべきでない
Scala で直接 Mockito を使おうとしたこんなコードで
import org.scalatest._ import mock.MockitoSugar import org.mockito.Mockito._ class SomeSpec extends FlatSpec with MockitoSugar { it should "judge a valid session" in { val req = mock[HttpServletRequest] val session = mock[HttpSession] when(req.getSession).thenReturn(session) when(session.getAttribute("user_id")).thenReturn("found") // 以下省略 } }
オーバーロードの問題で、以下のようなコンパイルエラーになります。
ambiguous reference to overloaded definition, both method thenReturn in trait OngoingStubbing of type (x$1: Object, x$2: <repeated...>[Object])org.mockito.stubbing.OngoingStubbing[Object] and method thenReturn in trait OngoingStubbing of type (x$1: Object)org.mockito.stubbing.OngoingStubbing[Object] match argument types (String) when(session.getAttribute("user_id")).thenReturn("found") ^
ここにあるように
こんな感じのコードに書き換えるとうまくいきますが
when(session.getAttribute("user_id")).thenReturn("found", Array[Object](): _*)
他に方法あるのでしょうか。そもそも「Mockito を直接使うのは諦めろ」かもしれないけど。
(追記)
と思ったら、これは MockitoSugar のせいでした。これは少なくとも 1.9.1 時点では使ってはいけないものですね。classOf を書く手間を惜しむなということで。 MockitoSugar の mixin をやめて、以下のようにコードを書き換えるだけで、問題なく Mockito を使えます。
val req = mock(classOf[HttpServletRequest])