2014-11-27 2 views
1

Я хотел бы издеваться над признаком черты. например, в этом коде, чтобы дразнить Вэл baz:Издевательство над чертой с scala-mock

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.

Я видел ответ на этот question, но это требует изменения val к def в черте, и я хотел бы сохранить baz на Вал

ответ

5

Это не поддерживается 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

+0

я не был осведомлен о прокси издевается. В тестовом файле приведены хорошие примеры, но есть ли какие-либо документы об этом? – lev

+1

Извинения, но документация для прокси-макетов (как вы видели) тонкая на земле. Хорошо, что они намного проще, чем макробные макеты, поэтому в примерах в тестовом файле есть «это» :-) –

Смежные вопросы