2015-06-16 101 views
0

我有這個類我想在phpspec測試:自定義構造函數和phpspec

class Something 
{ 
    protected $property; 

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

型號:: find()方法返回一個模型實例。

而且我不想phpspec使用DB等 我試圖

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

    it_is_initializable... 

但是,這並不工作。

有人嗎?

回答

1

PhpSpec鼓勵您好好關注代碼的設計。許多事情不可能阻止你傷害自己。 This is by design。如果你想要做的事情就像你提出的問題,使用另一個工具(例如phpunit)。

從構造函數訪問Model::find($someId)不是一個好設計,也不是可測試的(請參閱Dependency Inversion和其他SOLID principles)。

您應該從外部上下文注入依賴項。第一

class Something 
{ 
    private $model; 

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

開始用規範,你寫的代碼之前:要麼注入Model實例或Model::find()調用的結果。它會讓你的生活更輕鬆。

+0

我一直在懷疑。感謝您的確認! – Christophe

相關問題