Я пытаюсь написать тесты интеграции для своих репозиториев. Для простых репозиториев это кажется легким. Я сделал что-то вроде этогоКак правильно протестировать репозитории 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