Насмешка над чертой характера с 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:

https://github.com/paulbutcher/ScalaMock/blob/master/core_tests/src/test/scala/com/paulbutcher/test/proxy/ProxyMockTest.scala

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