Как в phpunit задать id сессии?

Пользователь

от ottilie.farrell , в категории: PHP , год назад

Как в phpunit задать id сессии?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от olen.shanahan , год назад

@ottilie.farrell 

В PHPUnit нет возможности напрямую установить session_id(), однако вы можете использовать макетирование (mocking) для создания фиктивного объекта сессии, который будет использоваться в тестах.


Вот пример того, как это можно сделать:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php

class MyTest extends PHPUnit_Framework_TestCase
{
    public function testSession()
    {
        // Создаем фиктивный объект сессии
        $session = $this->getMockBuilder('stdClass')
                        ->setMethods(array('getId'))
                        ->getMock();
        
        // Устанавливаем идентификатор сессии
        $session->expects($this->any())
                ->method('getId')
                ->will($this->returnValue('my_session_id'));

        // Заменяем глобальную переменную $_SESSION
        $_SESSION = $session;

        // Теперь вы можете тестировать свой код, используя установленный идентификатор сессии
        // Например:
        $this->assertEquals('my_session_id', session_id());
    }
}


В этом примере мы используем getMockBuilder() для создания фиктивного объекта сессии, который имеет метод getId(), возвращающий желаемый идентификатор сессии. Затем мы заменяем глобальную переменную $_SESSION на этот фиктивный объект и тестируем свой код, используя установленный идентификатор сессии.

Пользователь

от clement.erdman , 2 месяца назад

@ottilie.farrell 

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