gpt4 book ai didi

scala - 如何在 Mockito 中使用条件模拟

转载 作者:行者123 更新时间:2023-12-04 15:44:04 24 4
gpt4 key购买 nike

我有一个用 mockito 模拟的 scala 方法调用。

设对象为a,方法为b,方法b采用Map[String, String]类型的参数。我想要一个满足特定条件的 map 。我不知道这个 map 的所有键值对,但我想确保 map 有像 key1 -> value1key2 这样的键值对> -> 值 2当我使用这样的东西时

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

这里的anyorg.mockito中的静态成员。但我不能在这里使用它,因为这个模拟满足 Map 的任何键和值。在这种情况下如何实现条件模拟??

我正在寻找一个类似于 where 方法的实用程序,它位于org.scalamock.matchers.Matchers

最佳答案

尝试来自 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除了了解 Scala 的细节之外,它还是 Vanilla Mockito:

libraryDependencies += "org.mockito" %% "mockito-scala" % "1.5.11"

这是与 vanilla 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")
}
}

关于scala - 如何在 Mockito 中使用条件模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56652832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com