ScalaMock使用默认参数进行存根

时间:2017-03-23 20:55:33

标签: scala scalatest scalamock

我正在尝试模拟像

这样的函数
def foo(x: A, y: B, z: C = blah)

其中blah是一个我不想在现场创建的java连接对象

然而,当我尝试将其存根时

    (object.foo _)
  .stubs(a, b)

它出错了并且用替代方法表示重载的方法值存根... 因为它正在寻找第三个参数。无论如何都可以解决这个问题。

2 个答案:

答案 0 :(得分:3)

我同意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, *)

答案 1 :(得分:0)

当您删除方法时,可以使用通配符。

以下测试通过,我认为您正在寻找:

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)
  }

}