自定义构造函数和phpspec

时间:2015-06-16 14:04:07

标签: php phpspec

我有这个课我想在phpspec中测试:

class Something
{
  protected $property;

  public function __construct($someId)
  {
    $this->property = Model::find($someId);
  }
}

Model :: find()返回一个Model实例。

而且我不想让phpspec使用数据库等。 我试过了

class SomethingSpec
{
  public function let(Model $model)
  {
    $this->property = $model;
  }

  it_is_initializable...

但这不起作用。

任何人

1 个答案:

答案 0 :(得分:1)

PhpSpec鼓励您好好照顾代码的设计方式。很多事情都不可能阻止你伤害自己。 This is by design。如果你想做你问题中提到的事情,请使用其他工具(例如phpunit)。

从构造函数中访问Model::find($someId)并不是一个好的设计,并且它不可测试(请参阅Dependency Inversion和其他SOLID principles)。

您应该从外部上下文中注入您的依赖项。注入Model实例或Model::find()调用的结果:

class Something
{
    private $model;

    public function __construct(Model $model)
    {
        $this->model = $model;
    }
}

在编写代码之前先使用规范。它会让你的生活更轻松。