0

我正在尝试模拟一个函数

def foo(x: A, y: B, z: C = blah)

其中 blah 是我不想当场创建的 java 连接对象

但是,当我尝试像存根一样

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

它出错并说带有替代方法的重载方法值存根......因为它正在寻找第三个参数。有没有办法解决这个问题。

4

2 回答 2

4

我同意马特的观点,但想指出 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, *)
于 2017-03-24T12:17:18.130 回答
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)
  }

}
于 2017-03-23T23:33:34.943 回答