使用默认参数的 ScalaMock Stubbing
ScalaMock Stubbing with default parameters
我正在尝试模拟一个像
这样的函数
def foo(x: A, y: B, z: C = blah)
其中 blah 是我不想当场创建的 java 连接对象
然而,当我尝试将其存根时
(object.foo _)
.stubs(a, b)
它出错并说重载的方法值存根与替代...
因为它正在寻找第三个参数。有没有办法解决这个问题。
您可以在删除方法时使用通配符。
以下测试通过,我想这就是您要找的:
class DefaultParameterTest extends FlatSpec with Matchers with MockFactory {
class A {
def foo(x: Int, y: Int, z: Int = 0): Int = 0
}
it should "work with a default parameter" in {
val bar = mock[A]
(bar.foo _).stubs(1, 2, _: Int).returning(5)
bar.foo _ expects(1, 2, 0) returning 5 once()
bar.foo(1, 2)
}
}
我同意 Matt 的观点,但要指出的是 ScalaMock 中有一个通配符语法 (*) - http://scalamock.org/user-guide/matching/
trait Foo {
def foo(x: Int, y: Int, z: Int = 0): Int
}
val a: Int = ???
val b: Int = ???
val m = mock[Foo]
m.foo _ stubs(a, b, *)
我正在尝试模拟一个像
这样的函数def foo(x: A, y: B, z: C = blah)
其中 blah 是我不想当场创建的 java 连接对象
然而,当我尝试将其存根时
(object.foo _)
.stubs(a, b)
它出错并说重载的方法值存根与替代... 因为它正在寻找第三个参数。有没有办法解决这个问题。
您可以在删除方法时使用通配符。
以下测试通过,我想这就是您要找的:
class DefaultParameterTest extends FlatSpec with Matchers with MockFactory {
class A {
def foo(x: Int, y: Int, z: Int = 0): Int = 0
}
it should "work with a default parameter" in {
val bar = mock[A]
(bar.foo _).stubs(1, 2, _: Int).returning(5)
bar.foo _ expects(1, 2, 0) returning 5 once()
bar.foo(1, 2)
}
}
我同意 Matt 的观点,但要指出的是 ScalaMock 中有一个通配符语法 (*) - http://scalamock.org/user-guide/matching/
trait Foo {
def foo(x: Int, y: Int, z: Int = 0): Int
}
val a: Int = ???
val b: Int = ???
val m = mock[Foo]
m.foo _ stubs(a, b, *)