Answerはこんな感じで簡単に書けます。anyStringはMockitoのMatcher(org.mockito.Matcher)であることに注意。また、引数(以下の場合はname)はAnyで渡ってきます。
val helloWorld = mock[UserService] helloWorld.hello(anyString) answers { name => "Hello " + name.toString + "!" }
ArgumentCaptorは特に専用の構文は用意されていないようなので普通に使います。
val helloWorld = mock[UserService] val captor = ArgumentCaptor.forClass(classOf[String]) // 実行 ... there was one(helloWorld).hello(captor.capture()) val name = captor.getValue name mustBe "Naoki Takezoe"
ArgumentCaptorを使う場合、引数が1つの場合はいいのですが、複数の引数を持つメソッドに対して使う場合はMockitoのMatcherでマッチさせる必要があるのですが、このときeqなどのMatcherがSpecsのMatcherと衝突してしまうため、併用する場合は以下のように記述しなければなりません。
there was one(helloWorld).hello(captor.capture(), Matcher.eq(1))
まあ仕方ないんですけどちょっといけてないですね。