Попробуйте answers
из IdiomaticMockito
вот так
import org.scalatest._
import org.mockito.{ArgumentMatchersSugar, IdiomaticMockito}
trait Foo {
def bar(m: Map[String, String]): String
}
class FooSpec extends FlatSpec with Matchers with IdiomaticMockito with ArgumentMatchersSugar {
"Foo object" should "say woohoo" in {
val foo = mock[Foo]
foo.bar(*) answers ((m: Map[String, String]) => if (m.exists(_ == ("key1", "value1"))) "woohoo" else "boom")
foo.bar(Map("key1" -> "value1")) should be ("woohoo")
}
}
Здесь мы передаем условный ответ на answers
вот так
if (m.exists(_ == ("key1", "value1"))) "woohoo" else "boom")
Обратите внимание, что мы используем mockito-scala , который является ванильным Mockito в дополнение к знанию особенностей Scala:
libraryDependencies += "org.mockito" %% "mockito-scala" % "1.5.11"
Вот то же решение с ванильным мокито
import org.scalatest._
import org.mockito.Mockito
import org.mockito.Mockito._
import org.mockito.ArgumentMatchers._
trait Foo {
def bar(m: Map[String, String]): String
}
class FooSpec extends FlatSpec with Matchers {
"Foo object" should "say woohoo old syntax" in {
val foo = Mockito.mock(classOf[Foo])
doAnswer({ args =>
val m = args.getArgument[Map[String, String]](0)
if (m.exists(_ == ("key1", "value1"))) "woohoo" else "boom"
}).when(foo).bar(any[Map[String, String]])
foo.bar(Map("key1" -> "value1")) should be ("woohoo")
}
}