lev*_*lev 2 unit-testing scala 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)
Run Code Online (Sandbox Code Playgroud)
为了在我的测试中解决这个问题,我扩展了Foo,并baz以下列方式实现:
trait FooTest extends Foo {
override val baz: Int = 5
}
val fooMock = mock[FooTest]
(fooMock.bar _).expects().returning(6)
doSomeThing(fooMock)
Run Code Online (Sandbox Code Playgroud)
但这很难看,而且我希望scala mock有更标准的方法.
我已经看到了这个问题的答案的问题,但它需要改变val,以def在他们的特性,我想保持baz一个VAL
ScalaMock基于宏的模拟不支持这一点.当scala.meta可用时,这是我们希望解决的问题之一.
如果您想跟踪此信息,您可能需要关注:
https://github.com/paulbutcher/ScalaMock/issues/40
还有另一个可能感兴趣的选项 - ScalaMocks的基于代理的模拟确实支持模拟val.有关示例,请参阅ScalaMock测试套件:
| 归档时间: |
|
| 查看次数: |
4960 次 |
| 最近记录: |