Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用scalamock部分模拟类_Scala_Scalamock - Fatal编程技术网

使用scalamock部分模拟类

使用scalamock部分模拟类,scala,scalamock,Scala,Scalamock,我正在测试一个类Cls,它有两个函数:a和BA加载DataFrame并B调用A,然后执行一些操作并返回一个新的DataFrame。举例来说: Cls类{ def A(虚拟:Int):Int=5 def B():Int=A(7)+1 } 使用Scalamock如何编写我的测试代码 我试过: 测试(“测试用例”){ val f=存根[Cls] f、 A uu当7返回5时 断言(f.B()==6) } 我希望测试成功通过,我得到的0不等于6(mytestcase.scala:24)(我知道scal

我正在测试一个类
Cls
,它有两个函数:
a
B
A
加载
DataFrame
B
调用
A
,然后执行一些操作并返回一个新的
DataFrame
。举例来说:

Cls类{
def A(虚拟:Int):Int=5
def B():Int=A(7)+1
}
使用
Scalamock
如何编写我的测试代码

我试过:

测试(“测试用例”){
val f=存根[Cls]
f、 A uu当7返回5时
断言(f.B()==6)
}
我希望测试成功通过,我得到的
0不等于6(mytestcase.scala:24)
(我知道scalamock用mock替换了所有现有函数,但这不是预期的行为)

编辑:
我在mockito中找到了这个引用,但我不确定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
}

非常有趣的想法。我想知道是否有一种方法不涉及创建新类对不起,没有。我将ScalaMock作为一个项目进行维护,这是目前我唯一可以推荐的方法。