我怎样才能测试方法Bar :: foo?
class Foo {
protected function foo() {
// Do something
}
}
class Bar extends Foo {
protected function foo() {
parent::foo();
// Do something else
}
}
我需要模拟Foo :: foo而不是
Fatal error: Access level to Bar::foo() must be public (as in class Foo)...
...
答案 0 :(得分:0)
您无需模拟Foo::foo
来测试您的方法。它调用父foo
方法的事实是一个实现细节。您无需确保Bar
对象调用任何Foo
方法。您唯一要断言的是Bar
是Foo
的实例。
从您的示例中,您甚至不需要显式测试Bar::foo
,因为它是受保护的方法。如果Bar::foo
足够复杂,您认为需要为其编写测试。考虑将其重构为自己的类,并使用Bar
的策略模式。
您不希望测试检查是否调用内部方法。这使得重构您的课程变得更加困难。如果您要将Foo::foo
中的所有行复制到Bar::foo
,则应通过测试。这不是很好的编码实践。但测试无法确保良好的代码。他们确保代码正常工作。