我正在尝试使用两个函数测试 Cls 类: ABA 加载一个 DataFrame 并且 B 调用 A 然后执行一些操作并返回一个新的 DataFrame 。举个例子:

class Cls {
    def A(dummy: Int): Int = 5
    def B(): Int = A(7) + 1
}

使用 Scalamock 如何编写我的测试代码?

我试过了:

test("test case") {
  val f = stub[Cls]
  f.A _ when 7 returns 5
  assert(f.B() == 6)
}

我希望测试成功通过并且我得到 0 did not equal 6 (mytestcase.scala:24)(我知道 scalamock 用模拟替换了所有现有函数,但这不是预期的行为)

编辑:
我发现这个 answer 在 mockito 中引用了这个 concept 但我不确定 scalamock 是否支持这种模拟以及为什么不建议这样做。

最佳答案

ScalaMock 不会覆盖/ stub final 方法。因此,您的解决方案可能是创建一个子类,其中部分方法标记为 final:

import org.scalamock.scalatest.MockFactory
import org.scalatest.FunSuite

class PartialMockingTest extends FunSuite with MockFactory {

  test("test case") {

    class PartFinalCls extends Cls {
      override final def B(): Int = super.B()
    }

    val f = stub[PartFinalCls]
    f.A _ when 7 returns 5
    assert(f.B() == 6)
  }

}

class Cls {
  def A(dummy: Int): Int = 5
  def B(): Int = A(7) + 1
}

关于scala - 用 scalamock 部分模拟一个类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55760671/

10-11 19:20