Start · Sprachen · PHP · Referenz · uopz_unset_mock

uopz_unset_mock

Funktion

Entfernt einen zuvor für eine Klasse gesetzten Mock, sodass wieder die originale Klasse verwendet wird.

seit PHP 5.0.0 Kategorie: misc

Signatur

uopz_unset_mock(string $class): void

Beschreibung

uopz_unset_mock() ist Teil der uopz-Extension (User Operations for Zend) und macht einen mit uopz_set_mock() gesetzten Mock für die angegebene Klasse rückgängig. Nach dem Aufruf werden alle nachfolgenden Instanziierungen der Klasse wieder die originale Implementierung verwenden.

Diese Funktion ist primär für Unit-Tests gedacht, bei denen Klassen temporär durch Mocks ersetzt werden, um Abhängigkeiten zu isolieren. Der Aufruf von uopz_unset_mock() sollte typischerweise im Teardown des Tests erfolgen, um sicherzustellen, dass keine gesetzten Mocks in anderen Tests "durchbluten".

Wird uopz_unset_mock() für eine Klasse aufgerufen, für die kein Mock gesetzt ist, hat der Aufruf keine Wirkung und erzeugt keinen Fehler.

Parameter

Name Typ Default Beschreibung
$class Pflicht string Der vollqualifizierte Name der Klasse (ohne führenden Backslash), deren Mock entfernt werden soll. Muss mit dem Klassennamen übereinstimmen, der zuvor an uopz_set_mock() übergeben wurde.

Rückgabewert

Typ
void
Beschreibung
Die Funktion gibt keinen Wert zurück.

Beispiele

Mock setzen und anschließend wieder entfernen

<?php
class OriginalService {
    public function getName(): string {
        return 'Original';
    }
}

class MockService {
    public function getName(): string {
        return 'Mock';
    }
}

// Mock aktivieren
uopz_set_mock('OriginalService', MockService::class);

$obj1 = new OriginalService();
echo $obj1->getName(); // Gibt "Mock" aus

// Mock wieder entfernen
uopz_unset_mock('OriginalService');

$obj2 = new OriginalService();
echo $obj2->getName(); // Gibt "Original" aus
Mock Original

Einsatz im PHPUnit-Teardown

<?php
use PHPUnit\Framework\TestCase;

class MyServiceTest extends TestCase {
    protected function setUp(): void {
        uopz_set_mock('Mailer', MockMailer::class);
    }

    protected function tearDown(): void {
        // Sicherstellen, dass der Mock nach jedem Test entfernt wird
        uopz_unset_mock('Mailer');
    }

    public function testSendWelcomeMail(): void {
        $service = new MyService();
        $result = $service->sendWelcomeMail('user@example.com');
        $this->assertTrue($result);
    }
}

// Wichtig · Fallstricke

Achtung: Die uopz-Extension ist ausschließlich für den Einsatz in Entwicklungs- und Testumgebungen gedacht. Sie sollte niemals in Produktionssystemen aktiviert sein, da sie fundamentale Laufzeitmechanismen von PHP verändert.

Falls ein Mock nicht korrekt entfernt wird (z. B. durch einen fehlgeschlagenen Test), können nachfolgende Tests unerwartet den Mock statt der Originalklasse verwenden. Ein konsequenter Einsatz von uopz_unset_mock() im Teardown ist daher essenziell.

Die Funktion ist ab uopz 5.0.0 verfügbar und erfordert PHP 7.0 oder höher.