интеграционное тестирование — Как правильно тестировать 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 памяти, которая заполняется при каждом запуске тестового файла. Однако мой вопрос касается того, можно ли создавать все зависимости, необходимые для какой-либо операции, связанной с репозиторием.

Спасибо

2

Решение

На самом деле, насколько я понимаю, в интеграционном тесте вы хотели бы проверить свой репозиторий с реальными границами.

поэтому вместо создания объектов и помещения их в репозиторий я бы напрямую вставлял данные в вашу базу данных, проверял, можете ли вы получить данные и удалить их из базы данных.

Вы можете сделать это вручную или с помощью DBUnit

перед каждым тестом вы делаете прямые вставки, сохраняйте вставленные идентификаторы, затем используйте репозиторий для извлечения данных и используйте сохраненные идентификаторы для очистки базы данных впоследствии.

с DBUnit вы можете создавать файлы XML / CSV / YAML, в которых вы определяете данные, а DBUnit автоматически выполняет вставки и очистки.

https://phpunit.de/manual/current/en/database.html

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]