gpt4 book ai didi

ScalaMock:如何模拟/ stub 方法以在每次调用时返回不同的值?

转载 作者:行者123 更新时间:2023-11-28 19:44:34 25 4
gpt4 key购买 nike

使用 ScalaMock,我想模拟/ stub 一个类方法,这样它每次调用都会返回不同的值(调用顺序很重要)。

我可以使用 mockexpects 来实现这一点,但这将迫使我验证这些调用。

我可以用一个 stub 来做到这一点吗?

另外,我怎么能说“第一次返回 X,然后总是返回 Y”(同时使用 mockstub)?

最佳答案

是的,这是可以做到的,尽管语法有点不直观:

    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/

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