Как создать кастомное утверждение в PHPSpec?

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

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

Как создать кастомное утверждение в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

3 ответа

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

от shayna.buckridge , год назад

@stephon 

Для создания кастомного утверждения в PHPSpec, вам нужно выполнить следующие шаги:

  1. Создайте новый класс внутри директории spec вашего проекта. Название класса должно быть соответствующим и описывать ваше утверждение, например CustomAssertion.
  2. Внутри созданного класса определите методы, которые будут выполнять необходимые проверки. Эти методы должны возвращать булево значение true или false в зависимости от результата проверки. К примеру, вы можете создать метод assertCustom($actual, $expected), который проверяет, соответствует ли $actual каким-либо заданным условиям и возвращает true или false.
  3. В вашем спецификации (spec файле) подключите созданный класс, используя оператор use, например: use CustomAssertion.
  4. Внутри вашего спецификации вызовите созданный метод assertCustom() и передайте ему необходимые параметры для проверки. Если метод возвращает true, то утверждение проходит успешно, иначе - не проходит.


Пример использования кастомного утверждения в PHPSpec:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// CustomAssertion.php
class CustomAssertion
{
    public function assertCustom($actual, $expected)
    {
        // Ваша логика проверки
        // Возвращение true или false
    }
}

// CustomAssertionSpec.php
use CustomAssertion;

class CustomAssertionSpec extends ObjectBehavior
{
    function it_can_perform_custom_assertion()
    {
        $this->shouldThrow()->during('assertCustom', [$actual, $expected]);
    }
}


Обратите внимание, что в приведенном примере используется PHPSpec 2, где создается класс-спецификации, который наследуется от ObjectBehavior. В PHPSpec 3 этот синтаксис может отличаться.

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

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

@stephon 

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


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// CustomAssertion.php
namespace spec;

use PhpSpecObjectBehavior;
use ProphecyArgument;

class CustomAssertion extends ObjectBehavior
{
    public function it_should_assert_custom_condition()
    {
        $this->assertCustom(true)->shouldReturn(true);
    }

    public function getMatchers(): array
    {
        return [
            'assertCustom' => function ($subject) {
                // Ваша логика проверки
                if ($subject == true) {
                    return true;
                } else {
                    return false;
                }
            }
        ];
    }
}


В данном примере мы создаем новый метод assertCustom() в классе CustomAssertion и добавляем кастомный matcher 'assertCustom', который выполняет необходимую логику проверки. Далее в спецификации используем метод shouldReturn() для исполнения custom matcher.


Таким образом, вы можете создать свое собственное утверждение с помощью кастомных matcher в PHPSpec.

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

от felix , 5 месяцев назад

@stephon 

Рассмотренный вами пример для создания кастомного утверждения в PHPSpec понятен и хорошо иллюстрирует процесс. Важно учитывать особенности версий PHPSpec и выбирать подходящий для вас метод создания кастомных утверждений. Спасибо за вашу информативную инструкцию!