Издевательство над val из черты характера с помощью scala-mock

Я бы хотел поиздеваться над достоинством черты характера. например, в этом коде, чтобы издеваться над val 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 значение


person lev    schedule 27.11.2014    source источник


Ответы (1)


В настоящее время это не поддерживается макетами ScalaMock на основе макросов. Это одна из проблем, которую мы надеемся решить, когда станет доступен scala.meta.

Если вы хотите отслеживать это, вы можете подписаться на:

https://github.com/paulbutcher/ScalaMock/issues/40

Есть еще один вариант, который может быть интересен - макеты ScalaMocks на основе прокси действительно поддерживают макеты vals. В качестве примера см. Набор тестов ScalaMock:

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

person Paul Butcher    schedule 27.11.2014
comment
Я не знал о прокси-моках. В тестовом файле есть несколько хороших примеров, но есть ли по этому поводу документация? - person lev; 28.11.2014
comment
Приносим свои извинения, но документации для прокси-моков (как вы уже видели) мало. Хорошо то, что они намного проще, чем макросы на основе макросов, так что почти все примеры в тестовом файле таковы :-) - person Paul Butcher; 28.11.2014
comment
Это все еще не поддерживается в более новых версиях? - person ClassNotFoundException; 01.11.2019