用 scalamock 部分模拟 class
Mock partially a class with scalamock
我正在尝试使用两个函数测试 class Cls
:A
和 B
。 A
加载一个 DataFrame
并且 B
调用 A
然后做一些操作并且 returns 一个新的 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 用 mock 替换了所有现有函数,但这不是预期的行为)
编辑:
我在 mockito 中发现了这个 answer which references this concept 但我不确定 scalamock 是否支持这种模拟以及为什么不建议这样做。
ScalaMock 没有 override/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
}
我正在尝试使用两个函数测试 class Cls
:A
和 B
。 A
加载一个 DataFrame
并且 B
调用 A
然后做一些操作并且 returns 一个新的 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 用 mock 替换了所有现有函数,但这不是预期的行为)
编辑: 我在 mockito 中发现了这个 answer which references this concept 但我不确定 scalamock 是否支持这种模拟以及为什么不建议这样做。
ScalaMock 没有 override/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
}