用scala-mock嘲笑一个特征的val

时间:2014-11-27 10:34:35

标签: scala unit-testing mocking scalamock

我想模仿一个特质的val。例如,在此代码中,模拟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有更标准的方法来做这件事。

我已经看到了这个question的答案,但它要求将val更改为def这个特性,我想保留baz个VAL

1 个答案:

答案 0 :(得分:5)

ScalaMock基于宏的模拟不支持这一点。当scala.meta可用时,我们希望解决这个问题。

如果您想跟踪此信息,可能需要关注:

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

还有另一个可能感兴趣的选项 - ScalaMocks的基于代理的模拟确实支持模拟val。有关示例,请参阅ScalaMock测试套件:

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