我有一个用嘲笑模仿的scala方法调用。
设对象为bea
和method为b
,方法b采用type的参数Map[String, String]
。我想要一张符合特定条件的地图。我不知道该Map的所有键值对,但是当我使用类似的东西时,我想确保Map具有键值对key1
->value1
和key2
->value2
when(a.b(any[Map[String, String]])) thenReturn something
这any
是中的静态成员org.mockito
。但是我不能在这里使用它,因为此模拟对于Map
任何键和值都满意。在这种情况下,如何实现条件模拟?
我正在寻找一种与where
方法类似的实用程序org.scalamock.matchers.Matchers
尝试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")
请注意,除了了解Scala的特定特性外,我们还使用了香草Mockito的Mockito -scala:
libraryDependencies += "org.mockito" %% "mockito-scala" % "1.5.11"
这是香草Mockito的相同解决方案
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")
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句