abstract class Parent
{
public function getSomething(){} //this has to be mocked
}
class Child extends Parent
{
public function methodWhichIsTested()
{
$something = $this->getSomething(); //call to parent method
}
}
public function setUp()
{
$this->child = new Child;
}
public function testTheChildMethod()
{
$this->child->methodWhichIsTested();
}
如何向实例化的类Child添加模拟期望? 我想做点什么:
MockFramework->takeExistingClass('Child')->shouldRecieve('getSomething')->andReturn('whatever');
我的问题是,在实际案例中(不是示例),getSomething方法返回一个依赖项,我需要进行模拟!
我正在使用Mockery,但如果您知道如何使用phpUnit模拟执行此操作,请继续!也许我犯了一个基本的思维错误,请帮我一把!感谢。
答案 0 :(得分:3)
After you clarfied in chat getSomething
的返回值包含
抽象类的受保护属性,它通过抽象的另一个公共方法
注入到该抽象中
解决方案是通过其他方法注入该依赖项的模拟。
通常,您永远不需要模拟或存储TestSubject的行为。只有当您在全局范围或混合/硬编码对象创建到TestSubject中进行查找时,您才可能看到它的需要,但这些都是代码味道,应该重构。请参阅Sebastian Bergmann关于不可测试代码的文章: