2015-04-21 43 views
0

我想测试一个从其他方法获取其数据的类方法。
所以我这样做:phpspec强制方法返回值

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

public function read() { \t return file_get_contents($ this-> path); } 公共职能的getContent(){ \t回json_decode($这个 - >阅读()); } –

回答

0

这是不可能的,因为你正在指定的类的方法是存在的,而这是不可能的。

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

My top ten favourite PhpSpec limitations - Limitation #2

这种限制可以成为使用继承来扩展行为的情况非常明显。我们继承一个类并且想要添加一个新的方法,该方法在内部将某些行为委托给父类方法。我们不能嘲笑或存根方法。这导致我一次又一次地赞成构成而不是继承,这是面向对象设计的一个黄金原则。在少数情况下,继承是合理的,我们可以将可重用行为分离为一个单独的对象,并在父对象中使用组合,从而允许我们用double来替换协作者。

也读取Partial Mocking