我正在嘗試爲我的存儲庫編寫集成測試。對於簡單的存儲庫來說,這似乎很容易。我做了這樣的事情如何正確測試php存儲庫
class DBStatusRepositoryTest extends SmBaseIntegrationMemory
{
private $dbStatusRepository;
public function setUp()
{
parent::setUp();
$this->dbStatusRepository = new DBStatusRepository($this->dbConnection);
}
public function testShouldReturnAStatusEntity()
{
$status = $this->dbStatusRepository->getById(1);
$this->assertInstanceOf('Acme\Modules\Foo\Model\Status', $status);
}
}
查詢狀態庫應該返回一個狀態實體。
但我不知道如何處理更加複雜的倉庫像這樣的:
public function testAddAttachment()
{
$itemId = 420807;
$user = new User([//** data ** //];
$attachment = new Attachment();
$attachment->setUser($user);
$attachment->setSomething('something');
$attachment->set....;
$this->dbAttachmentRepository->addAttachmentForItem($itemId, $attachment);
$attchments = $this->dbAttachmentRepository->getAllForLead($itemId);
$this->assertCount(1, $attchments);
}
這段代碼也測試全部通過的依賴。我不確定這是否正常。
而且設置當資源庫,我們可以有依賴性的這樣的樹:
$userRepository = new DBUserRepository($this->dbConnection);
$attachmentFactory = new AttachmentFactory($userRepository);
$this->dbAttachmentRepository = new DBAttachmentRepository($this->dbConnection, $attachmentFactory);
這是執行對倉庫集成測試是正確的做法?
更新:爲了更具體我已經使用DBUnit和內存sqlite數據庫,每次運行測試文件時都會被填充。但是,我的問題涉及是否可以實例化某些與存儲庫相關的操作所需的所有依賴項。
感謝
我正在使用的內存sqlite的測試數據庫和DbUnit和我填充虛擬數據的數據庫。然而,不是讀取數據,我想測試數據的插入。請看我上面的第二個例子。我的問題是如何處理具有依賴關係樹的存儲庫。 – rungurean
我只是反映了我對PHPUnit的手動測試。 讓我們假設你不會使用測試,你會如何測試你的插入?你會檢查數據庫,看看是否有預期的條目。 因此,在「addAttachmentForItem」之後,我只需將普通的SQL請求調用到特定的表並檢查值。也許在預期的stdClass之前創建更容易的補償 –
這正是我所做的。 $ attchments = $ this-> dbAttachmentRepository-> getAllForLead($ itemId); 將查詢執行到內存中測試數據庫。同樣,我的問題涉及附件實體和用戶實體!爲什麼DBAttachmentRepositoryTest類的作用是測試/實例化這些? – rungurean