So che non accetti le risposte alle fixture, ma non sono nemmeno riuscito a capirlo. Il problema che stavo cercando di risolvere in realtà stava prendendo in giro alcuni metodi nel modello in modo da evitare di creare fixture sottostanti.
Così ho finito per usare Proxy
implementazione modello in Mockery
private $_product;
public function testMe()
{
// Here we use fixtured instance of Product model to build a Proxy
$this->_product = \Mockery::mock($this->product('product1'));
// somehow model attributes are inaccessible via proxy, but we can set them directly as a Proxy property
$this->_product->id = 1;
$this->_product->shouldReceive('getPrice')->andReturn(1000);
// assertions below
...
}
In questo esempio getPrice()
metodo dal Product
modello ritorna Product
prezzo da tabelle correlate. E lo prendiamo in giro qui per non dover popolare db con tutti i modelli correlati. Tuttavia, lo stesso Product
è ancora un appuntamento fisso.
Forse non è la soluzione migliore, ma è riuscito a risparmiarmi un po 'di tempo della CPU mantenendo i test delle unità disaccoppiati.
Documenti qui http://docs.mockery.io/en/latest/reference/partial_mocks.html
aggiornamento:
Ho anche fatto un piccolo helper per risolvere attributo proxying problema
/**
* @param \yii\base\Model $model
* @return \Mockery\MockInterface
*/
private function setupMock($model)
{
$mock = \Mockery::mock($model);
foreach ($model->getAttributes() as $key => $value) {
$mock->$key = $value;
}
return $mock;
}
questo modo tutti gli attributi ei loro valori corrispondenti dal modello originale diventano disponibile in simulazione.
Grazie, lo proverò! –