模拟部分与scalamock

时间:2019-04-19 10:49:18

标签: scala scalamock

我正在尝试使用两个功能测试类ClsABA加载DataFrameB调用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在嘲笑中引用了这个concept,但是我不确定scalamock是否支持这种嘲笑以及为什么建议反对。

1 个答案:

答案 0 :(得分:3)

ScalaMock不会覆盖/存根最终方法。因此,您的解决方案可能是创建一个子类,并将方法的某些部分标记为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
}