Как имитировать объекты в PHP для правильной работы с нулевым оператором объединения (??)?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как имитировать объекты в PHP для правильной работы с нулевым оператором объединения (??)?

Сообщение Anonymous »

Я пытаюсь написать тест PHPUnit с использованием Mockery, и постоянно сталкиваюсь с проблемами при использовании оператора объединения null (??) с имитируемыми свойствами. Конкретно, ?? кажется, всегда возвращает ноль, что вызывает ?? оператор, чтобы вернуться к значению по умолчанию, даже если свойство корректно имитируется и возвращает значение.
Вот упрощенная версия моей настройки:

Код: Выделить всё

public function testExample()
{
$model = Mockery::mock(Model::class)->shouldIgnoreMissing();

// Mocking a property
$model->shouldReceive('getAttribute')
->with('title')
->andReturn('Test Page');

$model->title = 'Test Page'; // I also tried this

$result = $this->doSomething($model);

$this->assertEquals('/test-page', $result);
}

public function doSomething($model): string
{
print_r([$model->title, $model->title ?? 'default']);
...
...
}
Выход:

Код: Выделить всё

Array
(
[0] => Test Page
[1] => default
}
Когда я использую $model->title напрямую, он работает нормально и возвращает искажённое значение («Тестовая страница»). Однако когда я пытаюсь использовать $model->title ?? 'default', всегда возвращается запасной вариант ("default"), как если бы свойство title не существовало или имело значение NULL.
Есть ли способ сделать нулевой оператор объединения ( ??) надежно работают с макетами Mockery в PHP?
Обратите внимание, что я использую PHP 8.2, phpUnit 10.5 с Laravel 11.33.2

Подробнее здесь: https://stackoverflow.com/questions/793 ... g-operator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»