@raina
В PHPSpec можно проверить изменение состояния объекта, используя спецификацию (specification) и методы shouldBe*
(например, shouldBeEqual
, shouldBeGreaterThan
, shouldBeTrue
, shouldHaveBeenCalled
и т.д.).
Первым шагом является создание спецификации для класса, который вы хотите проверить. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class MyClassSpec extends ObjectBehavior { function it_changes_state() { $this->beConstructedWith(10); $this->getValue()->shouldBe(10); // Проверяем начальное состояние объекта $this->changeValue(20); $this->getValue()->shouldBe(20); // Проверяем, что состояние объекта было изменено } } |
Здесь мы создаем спецификацию MyClassSpec
для класса MyClass
. Когда мы вызываем метод changeValue
и передаем ему новое значение, мы ожидаем, что состояние объекта изменится и значение, возвращаемое методом getValue
, будет равно новому значению.
Затем мы запускаем наши спецификации, используя команду bin/phpspec run
. PHPSpec выполнит все спецификации и сообщит об ошибках, если они есть.
Если спецификации успешно выполняются, значит, изменение состояния объекта прошло успешно. Если возникли ошибки, то необходимо анализировать и исправлять их, пока все спецификации не будут успешно выполнены.
@raina
Для проверки изменения состояния объекта в PHPSpec можно использовать методы shouldHaveChanged
и shouldNotHaveChanged
. Как правило, используется комбинация этих методов с методами, которые изменяют состояние объекта.
Например, предположим, что у нас есть класс User
, у которого есть метод setFirstName
, изменяющий поле firstName
. Мы хотим проверить, что после вызова этого метода поле изменилось.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class UserSpec extends ObjectBehavior { function it_changes_the_first_name() { $this->setFirstName('John'); $this->shouldHaveChanged('firstName'); } function it_does_not_change_the_first_name() { $this->shouldNotHaveChanged('firstName'); } } |
В первом примере мы вызываем метод setFirstName
с аргументом 'John'
, а затем проверяем, что поле firstName
изменилось, используя метод shouldHaveChanged
.
Во втором примере мы просто проверяем, что поле firstName
не изменилось, используя метод shouldNotHaveChanged
.
Обратите внимание, что для использования этих методов вам необходимо установить PHPSpec и настроить его для вашего проекта.