- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 ScalaMock,我想模拟/ stub 一个类方法,这样它每次调用都会返回不同的值(调用顺序很重要)。
我可以使用 mock
和 expects
来实现这一点,但这将迫使我验证这些调用。
我可以用一个 stub
来做到这一点吗?
另外,我怎么能说“第一次返回 X,然后总是返回 Y”(同时使用 mock
和 stub
)?
最佳答案
是的,这是可以做到的,尽管语法有点不直观:
trait Foo { def getInt: Int }
val fooStub = stub[Foo]
(fooStub.getInt _).when().returns(1).noMoreThanOnce()
(fooStub.getInt _).when().returns(2).noMoreThanOnce()
(fooStub.getInt _).when().returns(3)
(fooStub.getInt _).when().returns(4)
assert(fooStub.getInt == 1)
assert(fooStub.getInt == 2)
assert(fooStub.getInt == 3)
// Note that it's fine that we don't call it a fourth time - calls are not verified.
使用 .noMoreThanOnce() 而不是 .once() 很重要,否则会导致调用被验证。还有一个 .noMoreThanTwice() 方法,但我认为没有 .noMoreThanNTimes() 或任何等效方法。
下面是如何为模拟和 stub 执行“第一次返回 X,然后始终返回 Y”:
trait Bar { def getString: String }
val barMock = mock[Bar]
(barMock.getString _).expects().returning("X")
(barMock.getString _).expects().returning("Y").anyNumberOfTimes()
assert(barMock.getString == "X")
assert(barMock.getString == "Y")
assert(barMock.getString == "Y")
val barStub = stub[Bar]
(barStub.getString _).when().returns("x").noMoreThanOnce()
(barStub.getString _).when().returns("y")
assert(barStub.getString == "x")
assert(barStub.getString == "y")
assert(barStub.getString == "y")
关于ScalaMock:如何模拟/ stub 方法以在每次调用时返回不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162431/
在我的类里面,我有两个版本的方法。一个需要一个 Exception ,另外一个String . class Foo { def method(e: Exception) = ??? def m
我找不到任何文档来解释如何模拟 scalamock 中不带参数的重载方法,例如 public boolean isInfoEnabled(Marker marker); public boolean
我是 scalatest 和 scalamock 的新手。这是我的 sbt 文件中的内容 name := "cakepattern" version := "0.1" scalaVersion :=
我在我的应用程序中使用 Mongodb 作为持久性,我目前正在为我的代码编写测试。我的 CUT 如下所示 implicit def storageHandler[M[_]: Monad]( i
我知道如何模拟一个没有构造函数参数的类 例如,myMock = mock[MockClass] 但是,如果类有构造函数参数怎么办? 更具体地说,我正在尝试模拟 finatra 类:ResponseBu
我有一个非常简单的测试,我正在尝试模拟一个特征。测试甚至没有运行,并且失败并显示初始化错误: java.lang.IllegalArgumentException:需求失败:你记得使用 withExp
我将 ScalaMock 3.0 与 ScalaTest 和 Scala 2.10 一起使用。当我尝试模拟一个继承自 java.io.File 的类时,出现以下编译错误。 getPrefixLengt
Java 模拟框架 Mockito 有一个名为 ArgumentCaptor 的实用程序类,当多次调用验证方法时,它会累积值列表。 ScalaMock有类似的机制吗? 最佳答案 preview rel
我正在将 Scalamock 与 ScalaTest 结合使用,并尝试模拟 Java 接口(interface)。我目前有: private val _iface = mock [MyInterfac
我正在尝试测试类(class) Cls有两个功能:A和 B . A加载 DataFrame和 B电话A然后做一些操作并返回一个新的 DataFrame .举个例子: class Cls { d
如何在实现中 stub 使用 ClassTag 的方法? class RefsFactory { def get[I <: Item : ClassTag]: RefTo[I] = { v
使用 ScalaMock,我想模拟/ stub 一个类方法,这样它每次调用都会返回不同的值(调用顺序很重要)。 我可以使用 mock 和 expects 来实现这一点,但这将迫使我验证这些调用。 我可
在 scalamock 的文档中,据说: mocking classes, traits and case classes 是支持的功能之一。 我有以下案例类: case class Thing(pr
我尝试使用 Scalamock 在我的应用程序中使用模拟,但我想要模拟的是一个带有参数的类。我看到了 scalamock 文档,他们说要模拟类,我必须导入 org.scalamock.annotati
关于 ScalaMock 模拟(同伴)对象和构造函数的能力,存在一些相互矛盾的说法。页面ScalaMock step-by-step州 它还可以模拟: 类(class)*单例和伴生对象(静态方法) 对
关于 ScalaMock 模拟(同伴)对象和构造函数的能力,存在一些相互矛盾的说法。页面ScalaMock step-by-step州 它还可以模拟: 类(class)*单例和伴生对象(静态方法) 对
以下代码: import org.scalamock.scalatest.MockFactory import org.scalatest.FlatSpec trait SomeTrait { d
Scalamock 拒绝了我的 mock 尝试,说它不支持超过 22 种方法。 原因是因为在我试图模拟的类中总共有超过 22 个方法(2 个是我的,20 多个是混合的(来自 Akka Json 支持)
我尝试了以下 import org.scalatest._ import org.scalamock._ import org.scalamock.scalatest._ class TestMock
我正在尝试设置我的项目以使用 scalatest 和 scalamock。我使用的是 scala 版本 2.10.0。 但是,我似乎无法获得正确的依赖关系。 我从这段代码开始: class Cont
我是一名优秀的程序员,十分优秀!