Перезагрузите базу данных перед каким-либо тестированием в phpunit

#php #symfony #phpunit

#php #symfony #phpunit

Вопрос:

В настоящее время я разрабатываю модульные тесты с phpunit и symfony 5. В предыдущем задании с использованием behat мы смогли перезагрузить базу данных только для тестов, имеющих определенный тег. Я бы хотел сделать что-то подобное. Я знаю, что есть метод setUp () и аннотация @before, но они не позволяют мне что-либо делать для некоторых тестов, а не для других…

В идеале я хотел бы иметь аннотацию @reloadBase для размещения в тестовых методах, на которые нацелено это, которая была бы привязана к методу reloadBase () или чему-то подобному; или, по крайней мере, чему-то подобному, но пока я не смог придумать способ сделать это.

Я предполагаю, что есть возможность поместить эти тесты в отдельный файл, для которого был бы предусмотрен метод настройки, но это не так уж и здорово, я бы хотел сохранить свою текущую файловую организацию…

Есть идеи? Спасибо

Комментарии:

1. DAMADoctrineTestBundle может изолировать каждый тест с конкретными данными (используя приспособления ), интегрирован в Doctrine и прост в использовании.

2. Интересный пакет, но, похоже, он не позволяет перезагружать приспособления только для некоторых конкретных тестов, не так ли?

3. К сожалению, нет. Этот пакет создан для модульного тестирования. Таким образом, изменения базы данных во время модульного теста не должны влиять на другой модульный тест.

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

5. Пакет DAMA не перезагружает базу данных, если вы не изменяли эту базу данных.

Ответ №1:

Вот две идеи:

Признак / Базовый класс
Создайте признак или общий базовый класс с методом, который выполняет всю перезагрузку. Используйте признак или расширьте базовый класс и вызывайте его только в методах, которым требуется перезагрузка.

Расширение
Внедрите расширение. BeforeTestHook Для каждого теста будет вызываться строка, состоящая из имени класса и метода. Вы можете либо использовать средство чтения аннотаций (например, Doctrine’s), либо использовать отражение и самостоятельно проанализировать блок doc, чтобы проверить, существует ли @reloadBase аннотация в этом методе.

Комментарии:

1. Да! Способ расширения делает то, что я хочу! Большое спасибо!