【发布时间】:2015-05-26 15:12:19
【问题描述】:
我有一个类似于以下内容的课程:
class Foo {
/**
* @var array|Bar
*/
protected $source;
public function __construct($source = []) {
if (class_exists(Bar::class)) {
$source = new Bar($source);
}
$this->source = $source;
}
public function getSource() {
return $this->source;
}
// ...
}
Bar 来自一个单独的 PHP 包,这是composer.json 的suggest 部分中列出的可选依赖项。
我想在 phpspec 中为 getSource() 写两个单独的期望
function it_provides_array_source_by_default() {
$this->getSource()->shouldBeArray();
}
function it_provides_bar_instance_when_available() {
$this->getSource()->shouldReturnAnInstanceOf(Bar::class);
}
如果我的包的require-dev 包含包含Bar 的依赖项,我无法测试shouldBeArray()。
我不能嘲笑 Bar 喜欢:
function it_provides_bar_instance_when_available(Bar $bar) {
$this->getSource()->shouldReturnAnInstanceOf(Bar::class);
}
因为我得到一个 phpspec 错误:
[PhpSpec\Exception\Locator\ResourceCreationException] 找不到适合
Bar类的套件范围。
作为这样的可选类来测试返回值的最佳实践方法是什么?
【问题讨论】: