Я пытаюсь реализовать похожую на Django тестовую утилиту для php-приложения, используя PHPUnit. Под Django я подразумеваю, что отдельная тестовая БД создается из основной базы данных перед запуском первого теста и удаляется после запуска последнего теста.Тестовую базу данных необходимо создать только один раз, даже если одновременно выполняется много тестовых случаев.
Для этого я применил следующий подход:
я определил собственный класс комплекта тестов, чтобы я мог написать код для создания и удаления базы данных в ее методах установки и удаления, а затем использовать этот класс для запуска тестов. следующим образом
$ phpunit MyTestSuite
MyTestSuite определяет статический метод с именем suite
, где я просто использую glob
и добавляю тесты в набор тестов следующим образом
public static function suite() {
$suite = new MyTestSuite();
foreach (glob('./tests/*Test.php') as $tc) {
require_once $tc;
$suite->addTestSuite(basename($tc, '.php'));
}
return $suite;
}
Все классы Test Case происходят от подкласса PHPUnit_Framework_TestCase
, а также методы установки и отключения этого класса заботятся о загрузке и очистке исходных данных из файлов приспособлений json.
Теперь, когда нет. тестов увеличивается, мне нужно запускать только выбранные тесты за раз. Но поскольку я уже загружаю тесты с помощью набора тестов, параметр --filter использовать нельзя. Это заставляет меня чувствовать, что этот подход, возможно, не был правильным.
Итак, мой вопрос: как правильно сделать что-то перед запуском первого теста и после запуска последнего теста, независимо от того, как их находит PHPUnit?
PS: я использую не PHPUnit_Extensions_Database_TestCase, а свою собственную реализацию создания, заполнения и удаления базы данных.