Wie verspotte ich Objekte in PHP, damit sie mit dem Null-Coalescing-Operator (??) korrekt funktionieren?Php

PHP-Programmierer chatten hier
Guest
 Wie verspotte ich Objekte in PHP, damit sie mit dem Null-Coalescing-Operator (??) korrekt funktionieren?

Post by Guest »

Ich versuche, einen PHPUnit-Test mit Mockery zu schreiben, und es treten immer wieder Probleme auf, wenn ich den Null-Koaleszenzoperator (??) mit verspotteten Eigenschaften verwende. Konkret, ?? scheint immer null zurückzugeben, was dazu führt, dass das ?? Operator, um auf den Standardwert zurückzugreifen, auch wenn die Eigenschaft korrekt simuliert wird und einen Wert zurückgibt.
Hier ist eine vereinfachte Version meines Setups:

Code: Select all

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']);
...
...
}
Ausgabe:

Code: Select all

Array
(
[0] => Test Page
[1] => default
}
Wenn ich $model->title direkt verwende, funktioniert es einwandfrei und gibt den simulierten Wert („Testseite“) zurück. Wenn ich jedoch versuche, $model->title ?? 'default', der Fallback ('default') wird immer zurückgegeben, als ob die Titeleigenschaft nicht existiert oder null ist.
Gibt es eine Möglichkeit, den Null-Koaleszenzoperator ( ??) funktionieren zuverlässig mit Mockery-Mocks in PHP?
Beachten Sie, dass ich PHP 8.2, phpUnit 10.5 mit Laravel 11.33.2 verwende

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post