Scala 在实函数调用中使用模拟函数返回值

Scala 在实函数调用中使用模拟函数返回值,scala,mockito,Scala,Mockito,可以在实际函数调用中使用模拟函数吗?两个函数在同一个对象中。例如,如果我有 obj A { def mockThis(value: Int): Int = { value*5 } def realFuncIWantToTest(value: Int): Int = { val v = mockThis(value) v } } 显然,这是一个非常简单的情况,而这不是我的代码所做的(v实际上是一个复杂的对象)。本质上,我希望realFuncIWantTo

可以在实际函数调用中使用模拟函数吗?两个函数在同一个对象中。例如,如果我有

obj A {
  def mockThis(value: Int): Int = {
    value*5
  }

  def realFuncIWantToTest(value: Int): Int = {
    val v = mockThis(value)
    v
  }
}
显然,这是一个非常简单的情况,而这不是我的代码所做的(v实际上是一个复杂的对象)。本质上,我希望realFuncIWantToTest使用我定义的模拟函数返回值

谢谢

你可以用莫基托的间谍来做这件事;请参阅,以获取关于此的示例

间谍的工作方式基本上是将间谍包裹在测试类的真实对象周围

但是这里有一个词:即使是可能的,也要考虑改变你的设计。这种“部分嘲弄”通常很好地表明您的类违反了单一责任原则。意思是:一个类应该负责“一”件事。但是,你可以/必须在你的类中部分地模拟事物的想法表明你的类至少要负责两个方面,某种程度上是分离的

从这个意义上说:更好的方法是
mockThis()
调用另一个对象;可以通过依赖项注入将其插入此类


长话短说:从技术角度看,至少在Java级别上,您的想法应该可以很好地工作(我怀疑Mockito是否可以很好地处理scala对象);但是从概念的角度来看;你应该避免这样做。

是的,最后我决定改变设计并重构代码。您建议将
mockThis()
作为对另一个对象的调用,我使用依赖项注入插入该对象,这正是我所做的。花了一些时间,但最终它使它更干净,可读性也更高。谢谢你的帮助!不客气,我很高兴你发现我的建议很有帮助!