Как заставить phpspec оценить мой конструктор

public function __construct(RequestSchemaInterface $requestSchema)
{
    $this->schema = $requestSchema->getSchema();
}

Когда я запускаю phpspec для Builder, схема $this-> всегда будет нулевой. При обычном вызове он устанавливает схему. Я получил пусть реализован

function let(RequestSchema $requestSchema)
{
    $this->beConstructedWith($requestSchema);
}

Как я могу протестировать методы этого класса, если они используют схему $this->?

1 ответ

Решение

Ваш let() Метод использует заглушку для создания тестируемого объекта. Хотя это рекомендуется, это не обязательно. Вы можете создать реальный объект типа RequestSchema и использовать его для построения тестируемого класса:

function let()
{
    $requestSchema = new RequestSchema();
    $this->beConstructedWith($requestSchema);
}

Обновить:

Что касается заголовка вашего вопроса "Как заставить phpspec вычислять мой конструктор": конструктор выполняется, но, потому что вы используете заглушку для $requestSchema, вызов $requestSchema->getSchema() внутри конструктора возвращается NULL,

Вы можете подготовить заглушку, чтобы вернуть что-то еще, когда его метод getSchema() называется.

Попробуй это:

function let(RequestSchema $requestSchema)
{
    // Prepare the stub
    $requestSchema->getSchema()->willReturn('something');

    // Construct the object under test using the prepare stub
    $this->beConstructedWith($requestSchema);

    // Verify the constructor initialized the object properties
    $this->schema->shouldBe('something');
}
Другие вопросы по тегам