0

我正在尝试测试一个从另一个方法获取数据的类方法。
所以我这样做了:

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  

到底是怎么回事?

4

1 回答 1

0

不能对您指定的类的方法进行存根,也不能故意这样做。

PhpSpec 试图告诉您您决定设计的方式存在问题。

请参阅我最喜欢的十大 PhpSpec 限制 - 限制 #2

在使用继承来扩展行为的情况下,这种限制会变得非常明显。我们继承了一个类,并希望添加一个新方法,该方法在内部将某些行为委托给父类方法。我们不能模拟或存根该方法。这使我一次又一次地偏爱组合而不是继承,这是面向对象设计中的黄金原则。在少数证明继承是合理的情况下,我们可以将可重用行为隔离到一个单独的对象中,并在父对象中使用组合,从而允许我们用双精度替换协作者。

另请阅读部分模拟

于 2015-04-22T11:07:31.793 回答