我正在尝试测试一个具有两个函数的Cls类:A和B。A加载一个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用mock替换了所有现有函数,但这不是预期的行为)
编辑:我在mockito中找到了这个answer,它引用了这个concept,但是我不确定scalamock是否支持这种模仿,也不确定为什么不建议这样做。
发布于 2019-04-19 19:03:00
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
}https://stackoverflow.com/questions/55760671
复制相似问题