用斯卡拉嘲笑一个特征的价值



>我想嘲笑一个特质的瓦尔。 例如,在此代码中,模拟 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。

我已经看到了这个问题的答案,但它需要更改valdef特征,我想保持baz

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

相关内容

  • 没有找到相关文章

最新更新