Signatur
Beschreibung
uopz_get_mock() ist Teil der UOPZ-Erweiterung (User Operations for Zend) und dient dazu, den für eine bestimmte Klasse gesetzten Mock abzurufen. Mocks werden typischerweise in Unit-Tests eingesetzt, um Abhängigkeiten zu isolieren und durch kontrollierte Ersatzobjekte zu ersetzen.
Wurde für die angegebene Klasse zuvor mit uopz_set_mock() ein Mock hinterlegt, gibt uopz_get_mock() entweder den Namen der Ersatzklasse als string oder das Mock-Objekt zurück, je nachdem, was ursprünglich gesetzt wurde. Ist kein Mock vorhanden, wird null zurückgegeben.
Diese Funktion ist vor allem nützlich, wenn man in komplexen Test-Setups überprüfen möchte, ob ein Mock korrekt registriert wurde, bevor man mit dem Test fortfährt. Sie eignet sich auch für Debugging-Zwecke in Test-Infrastruktur-Code.
Achtung: Die UOPZ-Erweiterung ist ausschließlich für Test- und Entwicklungsumgebungen gedacht und sollte niemals in Produktions-Deployments aktiviert sein.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class Pflicht | string | Der vollqualifizierte Name der Klasse, für die der Mock abgefragt werden soll. |
Rückgabewert
string zurück, wenn ein Klassenname als Mock gesetzt wurde. Gibt ein object zurück, wenn ein Objekt als Mock registriert wurde. Gibt null zurück, wenn kein Mock für die angegebene Klasse gesetzt ist.Beispiele
Mock abfragen nach uopz_set_mock mit Klassenname
<?php
class OriginalService {
public function greet(): string {
return 'Hallo von OriginalService';
}
}
class MockService {
public function greet(): string {
return 'Hallo vom MockService';
}
}
// Mock setzen
uopz_set_mock(OriginalService::class, MockService::class);
// Mock abfragen
$mock = uopz_get_mock(OriginalService::class);
var_dump($mock);
// Mock entfernen
uopz_unset_mock(OriginalService::class);
Mock abfragen nach uopz_set_mock mit Objekt
<?php
class Database {
public function query(string $sql): array {
// Echte Datenbankabfrage ...
return [];
}
}
$mockDb = new class {
public function query(string $sql): array {
return [['id' => 1, 'name' => 'Test']];
}
};
// Objekt als Mock setzen
uopz_set_mock(Database::class, $mockDb);
// Mock abfragen und prüfen
$retrieved = uopz_get_mock(Database::class);
if (is_object($retrieved)) {
echo 'Mock ist ein Objekt.' . PHP_EOL;
var_dump($retrieved->query('SELECT * FROM users'));
}
uopz_unset_mock(Database::class);
// Kein Mock mehr vorhanden
var_dump(uopz_get_mock(Database::class));
// Wichtig · Fallstricke
Nur für Entwicklung/Tests: Die UOPZ-Erweiterung greift tief in die Zend Engine ein und ist nicht für den Produktionsbetrieb geeignet. Sie sollte ausschließlich in Test-Umgebungen genutzt werden.
Die UOPZ-Erweiterung muss explizit installiert und in der php.ini aktiviert werden (extension=uopz). Ab UOPZ 6.x gelten geänderte Verhaltensweisen bezüglich der Vererbungshierarchie bei Mocks. Stets sicherstellen, dass Mocks nach jedem Test mit uopz_unset_mock() wieder entfernt werden, um Seiteneffekte zwischen Tests zu vermeiden.