Как выполнить модульное тестирование сессионного класса оболочки? - PullRequest
3 голосов
/ 04 октября 2011

У меня есть простой сессионный класс-оболочка с геттерами и сеттерами для работы с $ _SESSION в стиле OO.session_start() вызывается в __constructor ().Какова лучшая практика для модульного тестирования этого класса?

  1. Поскольку мы выполняем модульные тесты из CLI - мы не можем по-настоящему создать сеанс, но мы можем определить переменные $ _SESSION в тестенастройка или любое другое место в тесте.Какова лучшая практика для эмуляции веб-сессии?Может быть, мне следует создать некую среду тестирования со всеми установленными серверными переменными?

  2. PHPUnit_Framework_Error_Warning: E_WARNING: session_start (): Невозможно отправить cookie сессии - заголовки уже отправлены (вывод начался с C: \ Users \ Kir \ AppData \ Local \ Temp \ phpunit_go_Kir.php: 770) - как этого избежать?Как запретить вывод модульного теста PHP Testing started at 12:59 ...

PS: Извините за вопросы, но я начал писать модульные тесты только вчера, и у меня пока недостаточно опыта.

Спасибо.

1 Ответ

0 голосов
/ 04 октября 2011

Вызов session_start в вашем коде связывает вас с реализацией session_start в PHP.На самом деле, идея сеанса имеет мало смысла в CLI.Вы можете защитить свои вызовы session_start с помощью следующего кода в вашем классе:

  if (!isset($_SESSION))
  {
     // If we are run from the command line interface then we do not care
     // about headers sent using the session_start.
     if (PHP_SAPI === 'cli')
     {
        $_SESSION = array();
     }
     elseif (!headers_sent())
     {
        if (!session_start())
        {
           throw new Exception(__METHOD__ . 'session_start failed.');
        }
     }
     else
     {
        throw new Exception(__METHOD__ . 'Session started after headers sent.');
     }
  }

Я сохранил свой класс сеанса как раз для этого кода (плюс простая функция id для session_id).Тестирование на CLI может продолжаться, так как был защищен вызов session_start.На самом деле тестирование кода, который я вставил, очень сложно.Вы можете проверить это, наблюдая в браузере за пределами вашего обычного тестирования CLI.По крайней мере, все остальные ваши тесты CLI теперь не будут затронуты вызовами session_start.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...