自定义构造函数和 phpspec

custom constructor and phpspec

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

class Something
{
  protected $property;

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

Model::find() returns 模型实例。

而且我不希望 phpspec 使用数据库等。 我试过了

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

  it_is_initializable...

但这不起作用。

有人吗?

PhpSpec 鼓励您注意代码的设计方式。许多事情都无法阻止您伤害自己。 This is by design。如果你想做你在问题中提出的事情,请使用其他工具(例如 phpunit)。

从构造函数访问 Model::find($someId) 不是一个好的设计,它不可测试(参见 Dependency Inversion and other SOLID principles)。

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

class Something
{
    private $model;

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

先从规范开始,然后再编写代码。它会让你的生活更轻松。