Проблема юнит тестирования с запуском / закрытием сессии - PullRequest
4 голосов
/ 06 июня 2011

У меня проблема с написанием модульных тестов для простой сессионной оболочки.

Сам класс имеет некоторые основные функции set, get, exists и т. Д. Все эти функции имеют проверку assertSessionStart, который выполняет следующие действия:

protected static function assertStarted()
{
    if (strlen(session_id()) < 1) {
        throw new Exception("Some text here");
    }
    return;
}

При записи наборов моих модулей у меня есть следующие методы setUp и tearDown.У меня они есть, потому что я хочу, чтобы у каждого запускаемого теста была свежая среда сеанса.

protected function setUp() {
    session_start();
}
protected function tearDown() {
    session_destroy();
}

Теперь к проблеме, я хочу метод теста, который не работает, когда я пытаюсь использовать set, когда я неСессия началась.Для этого мне придется уничтожить сеанс, начатый в setUp.Например:

public function testGetWithoutSession() {
        session_destroy();
        $this->setExpectedException('Exception');
        ESL_Session::set('set', 'value');
        session_start();
    }

Однако выдается предупреждение «Попытка уничтожить неинициализированный сеанс».Когда я ставлю echo session_id() прямо перед session_destroy, хотя - это показывает, что у меня есть действительный сеанс.

У кого-нибудь есть опыт модульных тестировщиков сессий?Дополнительная информация :

  1. PHP версии 5.3.6
  2. Linux

Ответы [ 2 ]

5 голосов
/ 06 июня 2011

Это происходит потому, что в этот момент:

    session_destroy();
    $this->setExpectedException('Exception');
    ESL_Session::set('set', 'value'); // HERE <----
    session_start(); // This is not called anymore!

есть исключение и session_start(); больше не вызывается.

Я бы предложил изменить ваш tearDown на session_destory только при активном сеансе. Так что в tearDown «Очисти только если надо» .

0 голосов
/ 06 июня 2011

Если у вас есть хорошая классная оболочка сессионного класса, я не рекомендую использовать каждый раз session_id(); для вашего утверждения.

Просто поместите свойство

private $started = false;

, а затем в

protected function setUp() {
    session_start();
    $this->started=true;
}

Таким образом, вы можете сделать assertStarted() на основе $ начал

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