【发布时间】:2017-01-27 07:48:58
【问题描述】:
我正在尝试为我的存储库编写集成测试。对于简单的存储库,这似乎很容易。我做了这样的事情
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 数据库,每次运行测试文件时都会填充该数据库。但是,我的问题是指是否可以实例化某些与存储库相关的操作所需的所有依赖项。
谢谢
【问题讨论】:
标签: php integration-testing ddd-repositories