考虑以下示例 Scala 类和单元测试:
class BrokenClass(s: String) {
private val len = s.length
def length(): Int = len
}
class BrokenTest extends FlatSpec with Matchers with MockFactory {
"A BrokenClass" should "stub correctly" in {
val stubThing = stub[BrokenClass]
(stubThing.length _) when () returns (10)
stubThing.length should equal (10)
}
}
在旧版本的 ScalaMock 中,此代码可以工作。使用 Scala 2.12 和 ScalaMock 3.6,我得到了 NullPointerException,因为即使我正在创建一个存根,它仍在调用 BrokenClass 构造函数的“s.length”行。所以它试图取消引用“s”,它是空的,因为我没有向它传递任何东西,因为我想要的只是一个在调用特定方法时返回特定值的存根。
有没有办法在不尝试调用对象的构造函数的情况下创建存根?为什么这在旧版本中有效?