ScalaMock Stubbbing с параметрами по умолчанию

Я пытаюсь издеваться над такой функцией, как

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

где blah - это объект подключения Java, который я не хочу создавать на месте

Однако, когда я пытаюсь заглушить его, как

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

Он выдает ошибку и говорит, что перегруженные заглушки значений метода с альтернативами... потому что он ищет третий параметр. Есть ли способ обойти это.


person fuzzycuffs    schedule 23.03.2017    source источник


Ответы (2)


Я согласен с Мэттом, но хочу отметить, что в 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, *)
person Philipp    schedule 24.03.2017

Вы можете использовать подстановочный знак, когда заглушаете свой метод.

Следующий тест проходит, и я думаю, это то, что вы ищете:

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

}
person Matt Fowler    schedule 23.03.2017