我目前正在致力於ZF2/Doctrine
項目,我正試圖讓我的PHPUnit
套件正常運行。第一次嘗試編寫一個ZF2項目的單元測試,一個Doctrine項目以及第一次與Mockery合作。到目前爲止這麼好,但是我遇到了Doctrine EntityManager
的問題;我可以結合shouldReceive和shouldNotReceive在Mockery中使用Doctrine Entity Manager在ZF2中進行控制器測試嗎?
我剛剛嘲笑我的Doctrine\Orm\EntityManager
,我想要一個getRepository
與某個參數調用返回一個模擬的存儲庫,但我希望對其他存儲庫的調用保持不變。我認爲使用shouldReceive
和shouldNotReceive
彼此並行將工作,但不知何故,我不斷收到錯誤;
class ProductControllerTest extends AbstractHttpControllerTestCase
{
public function testViewAction()
{
$serviceLocator = $this->getApplicationServiceLocator();
$entityManager = \Mockery::mock($serviceLocator->get('Doctrine\ORM\EntityManager'));
$entityManager
->shouldReceive('getRepository')
->with('App\Entity\Product')
->andReturn(\Mockery::mock('App\Repository\Product'));
$entityManager
->shouldNotReceive('getRepository')
->with(\Mockery::not('App\Entity\Product'));
$serviceLocator
->setAllowOverride(true)
->setService('Doctrine\ORM\EntityManager', $entityManager);
$this->dispatch('/products/first-product');
$this->assertResponseStatusCode(200);
}
}
我想要這個特定的事情的原因是因爲我只是想爲這段代碼寫一個測試。一些底層代碼並不完美,所以請幫助我專注於這一部分,但我希望能夠在不破壞應用程序的情況下重構底層代碼片段。必須開始某處使我的應用程序完全可測試;)
但是有什麼我的邏輯中有缺陷或缺少什麼?非常感謝!