Я написал модульные тесты с phpunit для RESTful API.
Теперь я хочу использовать phpunit для дальнейшего интеграционные тесты. Поскольку они намного медленнее, я создал специальный набор тестов «интеграция», который должен вызываться явно. Таким образом, юнит-тесты могут выполняться часто и оставаться быстрыми.
bootstrap.php
из интеграция testsuite выполняет дамп базы данных и заполнение. Интеграционные тесты довольно медленные, поэтому их будут вызывать не так часто, как модульные тесты. Им будут управлять только люди.
Чтобы предотвратить непреднамеренное удаление локальной базы данных разработки, я хочу, чтобы тестовый скрипт запросил подтверждение перед сбросом базы данных. Только в случае подтверждения база данных будет удалена и повторно посеяна.
Спасибо.
Чтобы предотвратить непреднамеренное удаление локальной базы данных разработки, я хочу, чтобы тестовый скрипт запросил подтверждение перед сбросом базы данных. Только в случае подтверждения база данных будет удалена и повторно посеяна.
Основная подсказка может выглядеть так:
<?php
echo "Are you sure you want to drop the database?\n";
echo "Type 'yes' or 'y' to continue: ";
$handle = fopen("php://stdin","r"); // read from STDIN
$line = trim(fgets($handle));
if($line !== 'yes' && $line !== 'y'){
echo "Execution stop.\n";
exit;
}
echo "\n Continuing execution: dropping database.\n";
Можно ли запросить ввод в тестах phpunit?
Да, это возможно, но остерегайтесь возможного тайм-аута.
Повреждает ли подсказка какой-либо «принцип разработки интеграционных тестов»?
Запрос на ввод пользовательских данных («запрос на ввод данных») во время ваших тестов будет указывать на очень плохое состояние автоматизации. Это показатель того, что ваши тесты не готовы к полной автоматизации.
Это приглашение «защита от несчастного случая» во время настройки теста или на этапе начальной загрузки, и в этом нет необходимости в штучной или изолированной среде тестирования.
Лучше стремиться к полной автоматизации тестирования и использовать сервер Continuous Integration для выполнения ваших функциональных и интеграционных тестов. (Точно так же, как @halfer указал ранее.)
Помните, что вы также можете определять среду, в которой выполняются ваши тесты.
Просто пропустите подсказку, когда вы находитесь на сервере CI.
Ну, есть определенные «шаблоны тестирования» или «лучшие практики».
parallel
выполнение. Других решений пока нет …