是否可以存根或模拟被测 class 的方法?
Is it possible to stub or mock a method of a class under test?
在此Scala
class
class A{
def a() = {b();}
def b() = {...}
}
如果我想测试 a()
,是否可以模拟或存根 b()
模拟覆盖 所有 方法(通常使用 return null
除非明确声明 return 其他) 而在这里你只想覆盖 one 方法。由于您的 class 不是 final
,因此执行类似
的操作会更容易
val tested: A = new A {
override def b = ...
}
而不是模拟它(如果没有像 PowerMock 这样的东西,实际上模拟 final
classes 也是不可能的)
val tested = mock[A]
(tested.b _) returning (...)
// tested.a returns null and ignores b
因为 mock
也会覆盖 a
使您的测试无用。您可以通过模拟 a
使其具有与原始实现相同的实现来“修复”它……但出于多种原因,这是荒谬的。
因此,使用模拟框架模拟经过测试的 class 的方法是可行的,但它只会妨碍而不是提供帮助。
在此Scala
class
class A{
def a() = {b();}
def b() = {...}
}
如果我想测试 a()
,是否可以模拟或存根 b()
模拟覆盖 所有 方法(通常使用 return null
除非明确声明 return 其他) 而在这里你只想覆盖 one 方法。由于您的 class 不是 final
,因此执行类似
val tested: A = new A {
override def b = ...
}
而不是模拟它(如果没有像 PowerMock 这样的东西,实际上模拟 final
classes 也是不可能的)
val tested = mock[A]
(tested.b _) returning (...)
// tested.a returns null and ignores b
因为 mock
也会覆盖 a
使您的测试无用。您可以通过模拟 a
使其具有与原始实现相同的实现来“修复”它……但出于多种原因,这是荒谬的。
因此,使用模拟框架模拟经过测试的 class 的方法是可行的,但它只会妨碍而不是提供帮助。