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