如何在Mockito中使用条件模拟

用户名

我有一个用嘲笑模仿的scala方法调用。

设对象为bea和method为b,方法b采用type的参数Map[String, String]我想要一张符合特定条件的地图。我不知道该Map的所有键值对,但是当我使用类似的东西时,我想确保Map具有键值对key1->value1key2->value2

when(a.b(any[Map[String, String]])) thenReturn something

any是中的静态成员org.mockito但是我不能在这里使用它,因为此模拟对于Map任何键和值都满意在这种情况下,如何实现条件模拟?

我正在寻找一种与where方法类似的实用程序org.scalamock.matchers.Matchers

马里奥·加里奇(Mario Galic)

尝试answersIdiomaticMockito像这样

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章