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

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

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

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

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

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

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

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, *)

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

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

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

}
Другие вопросы по тегам