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

时间:2017-03-02 19:16:00

标签: scala mockito

是否可以在真实函数调用中使用模拟函数?两个函数都在同一个对象中。所以,例如,如果我有

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

  def realFuncIWantToTest(value: Int): Int = {
    val v = mockThis(value)
    v
  }
}

显然这是一个非常简单的案例,这不是我的代码所做的事情(v实际上是一个复杂的对象)。基本上我希望realFuncIWantToTest使用我定义的模拟函数返回值。

谢谢!

1 个答案:

答案 0 :(得分:2)

可能能够使用Mockito的间谍来做到这一点;有关此示例,请参阅here

间谍基本上是通过让间谍围绕你所测试的类的真实对象来实现的。

但有一句话:即使有可能,也请考虑更改设计。这种“部分嘲弄”通常表明您的班级违反了单一责任原则。含义:一个班级应该负责“一个”的事情。但是你可以/必须部分模拟你的类中的东西的想法表明你的班级至少负责两个,不知何故断开方面。

从这个意义上讲,更好的方法是mockThis()是对另一个对象的调用;可以通过依赖注入插入到此类中。

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