我正在尝试测试从另一种方法获取数据的类方法 所以我这样做了:
function it_should_return_json_file_as_array()
{
$this->exist()->willReturn(true);
$this->read()->willReturn("{\"key\":\"value\"}");
$this->getContent()->shouldHaveKeyWithValue('key', 'value');
}
但是当我发起phpspec run
时,我得到了这个:
[InvalidArgumentException]
String "" is not a valid classname.
Please see reference document: https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
发生了什么事?
答案 0 :(得分:0)
不可能存储您指定的类的方法,并且无法有目的。
PhpSpec试图告诉你,你决定设计的方式存在问题。
请参阅My top ten favourite PhpSpec limitations - Limitation #2:
在使用继承扩展行为的情况下,此限制可能变得非常明显。我们继承了一个类,并希望添加一个新方法,在内部将某些行为委托给父类方法。我们不能模拟或存根该方法。这导致我一次又一次地支持组合而不是继承,这是OO设计中的黄金原则。在少数情况下,继承是合理的,我们可以将可重用行为隔离到一个单独的对象中,并使用父对象中的组合,允许我们用双精度替换协作者。
另请阅读Partial Mocking。