使用PHPSpec进行测试时,如何使用注入到我的方法中的类接口而不是实际的具体类?
例如,我有一个Product
类,可以在方法中注入VariationInterface
:
/**
* ...
*/
public function addVarient(VarientInterface $varient)
{
return $this->varients->add($varient);
}
虽然由于PHPSpec没有将VarientInterface
绑定到Varient
的IOC容器,所以我无法真正测试我的课程。
编译接口而不是具体类是不是最佳做法?
答案 0 :(得分:1)
您可以在PHPSpec中模拟具体的类和接口。
请验证此示例:
<?php
//file spec/YourNameSpace/ProductSpec.php
namespace spec\YourNameSpace\Product;
use YourNameSpace\VarientInterface;
use PhpSpec\ObjectBehavior;
class ProductSpec extends ObjectBehavior
{
function it_is_varients_container(VarientInterface $varient)
{
$this->addVarient($varient);
$this->getVarients()->shouldBe([$varient]);
}
}
您只需将VarientInterface作为参数传递给test方法。 这个VarientInterface被PhpSpec(实际上是Prophecy)嘲笑。
请查看关于模仿http://www.phpspec.net/docs/introduction.html#prophet-objects
的正式phpspec文档