... function showMenu() { echo '
- item1
- item2
- item3
Функция showMenu() выводит меню на странице. Программист по каким-то своим соображениям не захотел ее выносить в php-файл. Если мы заходим покрыть данный файл тестами, то уже на втором тесте получим фатал:
PHP Fatal Error: Cannot redeclare showMenu() (previously declared in /home/test/index.phtml)
Самым лучшим выходом из данной ситуации будет рефакторинг кода: вынести функцию в php-файл или обернуть ее проверкой function_exist():
... if (!function_exist('showMenu')) { function showMenu() { echo '
- item1
- item2
- item3
Но что делать когда мы не имеем права редактировать существующий код (в моей практике такое бывает очень часто)? Тогда нам на помощь приходят аннотации PHPUnit @runInSeparateProcess и @runTestsInSeparateProcesses. Они помогают изолировать тест-кейсы, запуская их в отдельных процессах.
@runTestsInSeparateProcesses позволяет изолировать все тест-кейсы:
/** * @runTestsInSeparateProcesses **/ class MyTest extends PHPUnit_Framework_TestCase { public function testTest1() { // ... } public function testTest2() { // ... } }
@runTestsInSeparateProcesses позволяет изолировать определенные тест-кейсы:
class MyTest extends PHPUnit_Framework_TestCase { public function testTest1() { // ... } /** * @runInSeparateProcess **/ public function testTest2() { // ... } }
Надеюсь, эти аннотации помогут вам так же сильно, как помогли сегодня мне. Программируйте правильно о_О
Комментариев нет:
Отправить комментарий