Heim > Backend-Entwicklung > PHP-Problem > Wie verwende ich Scheinobjekte im PHP -Unit -Test?

Wie verwende ich Scheinobjekte im PHP -Unit -Test?

Robert Michael Kim
Freigeben: 2025-03-10 18:04:44
Original
557 Leute haben es durchsucht

Wie verwende ich Mock -Objekte in PHP -Unit -Tests? Sie ermöglichen es Ihnen, die zu testende Einheit zu isolieren und seine Wechselwirkungen mit externen Systemen oder komplexen Komponenten zu steuern. Dies ist entscheidend, um zuverlässige und schnelle Einheiten -Tests zu schreiben. Normalerweise verwenden Sie ein spöttisches Framework wie die integrierten Verspottungsfunktionen von Phpunit oder eine dedizierte Bibliothek wie Prophezeiung. Klasse User {private $ Datenbank; öffentliche Funktion __construct (Datenbank $ Datenbank) {$ this- & gt; Datenbank = $ Datenbank; } public function getUserById (int $ id): array {return $ this- & gt; Datenbank- & gt; fetchuser ($ id); }} Klassendatenbank {public function fetchuser (int $ id): array {// simulieren Sie Benutzerdaten aus einer Datenbank // ... komplexe Datenbankinteraktion ... return ['id' = & gt; $ id, 'name' = & gt; 'John Doe']; }} class usertest erweitert testCase {public function testgetUserById () {// Erstellen Sie ein Mock-Objekt für die Datenbankabhängigkeit $ mockDatabase = $ this- & gt; CreateMock (Datenbank :: class); // Definieren Sie das erwartete Verhalten des Mock -Objekts $ mockdatabase- & gt; erwartet ($ this- & gt; einmal ()) -& gt; methode ('fetchuser') -& gt; mit (1) -& gt; WillReturn (['id' = & gt; 1, 'name' = & gt; 'test user']; // Erstellen Sie ein Benutzerobjekt mit der Mock -Datenbank $ user = new user ($ mockDatabase); // das Ergebnis $ this- & gt; assertEquals (['id' = & gt; 1, 'name' = & gt; 'test user'], $ user- & gt; getUserById (1)); }}

In diesem Beispiel simuliert $ MockDatabase die Datenbank Klasse. $ mockDatabase- & gt; erwartet ($ this- & gt; einmal ())-& gt; Dies vermeidet die Notwendigkeit, während des Tests eine Verbindung zu einer realen Datenbank herzustellen, wodurch der Test schneller und zuverlässiger wird. Dies verhindert Testfehler, die durch externe Faktoren wie Datenbankprobleme, Netzwerkprobleme oder das Verhalten anderer Komponenten verursacht werden. Sie testen das Gerät in einer kontrollierten Umgebung. <li> <strong> Geschwindigkeit: </strong> beschleunigt die Tests erheblich. Sie eliminieren den Overhead der Interaktion mit realen externen Systemen und führen dazu, dass Testsuiten viel schneller ausgeführt werden. Sie können ihr Verhalten simulieren und testen, wie Ihr Code mit ihnen interagiert. Sie können unterschiedliche Antworten von Abhängigkeiten, einschließlich der Fehlerbedingungen, simulieren, ohne komplexe Testumgebungen einrichten zu müssen. Änderungen in einem Teil Ihres Systems verursachen weniger wahrscheinlich Kaskadierungsfehler in Ihren Tests. Mocke. Dies macht Ihren Code Testableer und reduziert eine enge Kopplung. Diese Frameworks bieten Funktionen zum Erstellen, Konfigurieren und Überprüfen von Mock -Objektverhalten, einschließlich Stubbing -Methoden, um bestimmte Werte zurückzugeben, die Erwartungen an Methodenaufrufe zu setzen und zu überprüfen, ob Methoden mit den richtigen Argumenten aufgerufen wurden. Auf diese Weise können Sie nur bestimmte Methoden einer Klasse verspotten, sodass die anderen normal funktionieren. Dies ist nützlich, wenn Sie Interaktionen mit nur bestimmten Teilen einer großen Abhängigkeit testen müssen. Wählen Sie den entsprechenden Typ basierend auf Ihren Testanforderungen. Stubs geben einfach vordefinierte Werte zurück, während Mocks Wechselwirkungen überprüfen. Konzentrieren Sie sich darauf, nur die Teile zu verspotten, die für die Isolierung der zu testenden Einheit von entscheidender Bedeutung sind. Überreden können zu spröden und weniger informativen Tests führen. Streben Sie nach einer lockeren Kopplung unter Verwendung der Abhängigkeitsinjektion. Es ist wichtig, auch Integrationstests durchzuführen, um die Wechselwirkungen zwischen verschiedenen Komponenten in einer realistischen Umgebung zu überprüfen. Wiederholen Sie Ihren Code, um den Testvorgang zu vereinfachen. Mehrdeutige Erwartungen können zu unzuverlässigen Tests führen. Verwenden Sie spezifische Behauptungen, um Interaktionen zu überprüfen. </li>

Das obige ist der detaillierte Inhalt vonWie verwende ich Scheinobjekte im PHP -Unit -Test?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage