Насмешка над чертой характера с scala-mock
Я хотел бы издеваться над чертой характера. например, в этом коде, чтобы издеваться над baz
:
trait Foo {
def bar(): Int
val baz: Int
}
val fooMock = mock[Foo]
(fooMock.bar _).expects().returning(5)
(fooMock.baz _).expects().returning(6) //doesn't compile
doSomeThing(fooMock)
Чтобы решить эту проблему в моем тесте, я расширил Foo и реализовал baz
следующим образом:
trait FooTest extends Foo {
override val baz: Int = 5
}
val fooMock = mock[FooTest]
(fooMock.bar _).expects().returning(6)
doSomeThing(fooMock)
Но это ужасно, и я надеялся, что есть более стандартный способ сделать это с помощью scala mock.
Я видел ответ на этот вопрос, но это требует изменения val
в def
в черту, и я хотел бы сохранить baz
Валь
1 ответ
Это не поддерживается макетами, основанными на макросах, в ScalaMock. Это одна из вещей, которую мы надеемся решить, когда scala.meta станет доступной.
Если вы хотите отслеживать это, вы можете следовать:
https://github.com/paulbutcher/ScalaMock/issues/40
Есть еще один вариант, который может представлять интерес - макеты ScalaMocks на основе прокси поддерживают значения mocking vals. Для примера, посмотрите набор тестов ScalaMock: