问题描述
在此Scala
类中
class A{
def a() = {b();}
def b() = {...}
}
如果我想测试a()
,可以模拟或存根b()
解决方法
嘲笑会覆盖 all 方法(通常使用 return null
,除非明确声明会返回其他内容),而在这里您只想覆盖 one 方法。由于您的课程不是final
,所以做类似的事情会更容易
val tested: A = new A {
override def b = ...
}
比模拟它(实际上,final
类的模拟如果没有PowerMock之类也是不可能的)
val tested = mock[A]
(tested.b _) returning (...)
// tested.a returns null and ignores b
因为mock
还将覆盖a
,从而使测试无用。您可以通过嘲笑a
使其具有与原始版本相同的实现方式来“修复”它,但是由于许多原因,这是荒谬的。
因此可以使用带有模拟框架的经过测试的类来模拟方法,但是这种方法妨碍了人们的工作,而不是提供帮助。