Как проверить использование глобальных переменных в PHPSpec?

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

от vladimir , в категории: PHP , год назад

Как проверить использование глобальных переменных в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от edyth , год назад

@vladimir 

В PHPSpec нет прямой поддержки проверки использования глобальных переменных, так как фокусируется на тестировании поведения объектов, а не на внутренней реализации или состоянии. Однако, вы можете проверить, как объекты взаимодействуют с глобальными переменными, используя некоторые обходные решения.


Одним из способов проверки использования глобальных переменных в PHPSpec является использование дублированных зависимостей. Вы можете создать фиктивные объекты, которые представляют глобальные переменные, и затем проверить, как ваш объект взаимодействует с этими фиктивными объектами.


Например, предположим, что у вас есть класс MyClass, который использует глобальную переменную $_SESSION. В PHPSpec вы можете создать фиктивный объект для представления $_SESSION и затем проверить взаимодействие MyClass с этим фиктивным объектом. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class SessionDummy
{
    // реализация фиктивного объекта, представляющего $_SESSION
}

class MyClassSpec extends ObjectBehavior
{
    function it_should_use_session_variable()
    {
        $sessionDummy = new SessionDummy();
        $this->beConstructedWith($sessionDummy);

        // теперь вы можете проверить, что MyClass использует этот фиктивный объект,
        // например, через setter или getter

        // пример использования:
        $this->getSession()->shouldReturn($sessionDummy);
    }
}


Это позволит вам проверить, что ваш объект взаимодействует с фиктивным объектом, который представляет глобальную переменную $_SESSION. Обратите внимание, что вам нужно будет вручную создать фиктивный объект и передать его в конструктор вашего объекта.


Таким образом, хотя PHPSpec не предоставляет прямой поддержки для проверки использования глобальных переменных, вы можете использовать фиктивные объекты для представления этих переменных и проверить взаимодействие с ними.

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

от ian.heidenreich , 5 месяцев назад

@vladimir 

В качестве альтернативы использованию фиктивных объектов, можно также использовать механизм "spy" в PHPSpec для проверки использования глобальных переменных. Spy - это объект, который записывает все вызовы методов, которые сделаны к нему, что облегчает проверку на то, были ли определенные методы или действия выполнены.


Пример использования спайов для проверки использования глобальной переменной $_SESSION бы мог выглядеть следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
use PhpSpecObjectBehavior;
use SessionSpy;

class MyClassSpec extends ObjectBehavior
{
    function it_should_use_session_variable()
    {
        $session = new SessionSpy();

        // Передаем спай $_SESSION в метод конструктора вашего объекта
        $this->beConstructedWith($session);

        // Вызываем методы вашего объекта, которые должны использовать $_SESSION
        $this->doSomething();

        // Проверяем, что методы объекта взаимодействовали с $_SESSION
        $session->checkMethodCall('set', ['key', 'value'])->shouldHaveBeenCalled();
    }
}


В данном случае, SessionSpy - это класс, который содержит логику записи вызовов методов. В спецификации создается этот спай и передается в конструктор вашего объекта. Далее вызываются методы тестируемого объекта, которые должны использовать глобальную переменную $_SESSION, и используется checkMethodCall для проверки вызова метода с определенными параметрами.


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