Scala 模拟不嘲笑扩展类函数?



以下是代码的外观:

class B {
doStuff() //some API call
}
class A extends B {
val x = doStuff()
...
}

当我这样嘲笑它时:

class ASpec {
val a = new A
when(a.doStuff()).thenReturn("stuff") <---this should just return "stuff" on the test
assert(true, a.doOtherStuff())
}

问题是它肯定仍然从doStuff((进行API调用。为什么它不按指定返回"东西"?

你需要A做一个模拟。现在,您正在通过new A创建A的真实实例。相反,请使用mock(classOf[A])(或者,使用ScalaTest的MockitoSugar,mock[A](:

val a = mock(classOf[A])
when(a.doStuff()).thenReturn("stuff")
when(a.doOtherStuff()).thenCallRealMethod() // Necessary since `A` is a mock
assert(a.doOtherStuff())

但是,模拟类的一个方法以便您可以测试另一个方法通常是一个坏主意™。首先,您需要记住指定doOtherStuff使用的每种A方法的行为(可能对所有方法都使用thenCallRealMethod(。只喜欢嘲笑课堂外的东西。为此,您可以模拟doStuff所依赖的内容,也可以doStuff移动到另一个类。

相关内容

  • 没有找到相关文章

最新更新