Aktueller Standort: Startseite> Neueste Artikel> Praktische Leitfaden für PHP -Unit -Test

Praktische Leitfaden für PHP -Unit -Test

M66 2025-09-29

Überblick über Scheinobjekte in Unit -Tests

Ein Scheinobjekt ist ein häufig verwendeter Test-In-In-In-In-Test-Test, mit dem das Verhalten einer Klasse oder Schnittstelle simuliert wird, und kann seinen Rückgabewert genau steuern oder Ausnahmen werfen. Durch das Scheinobjekt können Entwickler die interaktive Logik von Funktionen oder Methoden testen, ohne die tatsächlichen Abhängigkeiten zu instanziieren.

Erstellen Sie ein Scheinobjekt

In PHP können Sie die GetMockBuilder -Methode verwenden, um ein Scheinobjekt zu erstellen. Diese Methode akzeptiert die folgenden Parameter:

  • $ originalClassName: Der Name der zu simulierten Klasse oder Schnittstelle.
  • $ methods (optional): eine Reihe von Methoden, die eine Simulation erfordern.
 // Simulation MyInterface Schnittstelle
$mock = $this->getMockBuilder(MyInterface::class)
             ->getMock();

// Simulation MyClass 类并Simulation其方法
$mock = $this->getMockBuilder(MyClass::class)
             ->setMethods(['myMethod'])
             ->getMock();

Scheinobjekte konfigurieren

Nach dem Erstellen eines Mock -Objekts können Sie sein Verhalten über die Methodenmethode konfigurieren, z. B. ein Renditewert oder ein Ausnahme ausführen:

 // Konfiguration Mock Objekt zurückkehren 'foo'
$mock->method('getMyMethod')
     ->willReturn('foo');

// Konfiguration Mock Objekt, Ausnahme auszulegen
$mock->method('myOtherMethod')
     ->willThrowException(new RuntimeException());

Praktische Fälle

Hier ist ein Beispiel, das zeigt, wie ein Scheinobjekt in Unit -Tests verwendet werden. Angenommen, es gibt eine MyClass -Klasse, die von der MyService -Klasse abhängt:

 class MyClass
{
    private $myService;

    public function __construct(MyService $myService)
    {
        $this->myService = $myService;
    }

    public function doSomething(): string
    {
        return $this->myService->getData();
    }
}

Die MyService -Klasse enthält eine GetData -Methode, die die Zeichenfolge "Foo" zurückgibt. Um die MyClass :: Doomethething -Methode zu testen, können Sie das Scheinobjekt verwenden:

 class MyClassTest extends PHPUnit_Framework_TestCase
{
    public function testDoSomething()
    {
        // erstellen MyService Mock Objekt
        $mockService = $this->getMockBuilder(MyService::class)
                            ->setMethods(['getData'])
                            ->getMock();

        // Konfiguration Mock Objektzurückkehren "bar"
        $mockService->method('getData')
                    ->willReturn('bar');

        // erstellen MyClass Instanz und Injektion Mock Objekt
        $myClass = new MyClass($mockService);

        // Bejahung MyClass::doSomething zurückkehren "bar"
        $this->assertEquals('bar', $myClass->doSomething());
    }
}

In diesem Test haben wir das Scheinobjekt von MyService erstellt und seinen Rückgabewert auf "Bar" gesetzt. Dann in die MyClass -Instanz injizieren, und überprüfen Sie schließlich, dass die Interaktion zwischen MyClass und MyService durch Behauptungen korrekt ist.

Durch die Verwendung von Mock -Objekten können Entwickler die Abhängigkeiten und die Geschäftslogik in Unit -Tests effizient überprüfen, ohne sich auf tatsächliche Dienste oder komplexe Umgebungen zu verlassen.