Dies ist eine Kombination aus PHPunit-Dokumentation und Erklärungen von Experten aus dieser Zeit. Ich möchte das Wissen, das ich gelernt habe, aufzeichnen, es in Zukunft als Referenz ergänzen und das Gelernte verbessern.
Wir im Allgemeinen Verwenden Sie Einzeltests, um das Unternehmen zu testen. Testen Sie den Code im Unternehmen, und er wird Ihnen dabei helfen, die kleinen Bereiche zu finden, in denen Ihre Überlegungen nicht umfassend genug sind. (Obwohl Daniel sagte, dass man zuerst Unit-Tests und dann den Implementierungscode schreiben kann, habe ich jetzt das Gefühl, dass ich davon noch weit entfernt bin)
Stub (Stub):
„Die praktische Methode, ein Objekt durch ein Test-Double zu ersetzen, das (optional) einen konfigurierten Rückgabewert zurückgibt, nennt sich Stubbing“ – so lautet die Erklärung des Stubbings in der offiziellen Dokumentation
Jetzt kann ich es Ich verstehe es, wenn ich zurückblicke. Wie soll ich es ausdrücken? Nimm eine Birne.
==== Prämisse
Was ich testen möchte, ist diese Methode: switchClothes($username) ---- Fragen Sie die Datenbank nach Namen ab. Wenn das Geschlecht 1 ist, wird die Hose zurückgegeben werden. Ja 0, den Rock zurückgeben
<?php Class Switch{ public function switchClothes($username){ $database=new database(); $gender=$databse->find("id=$username"); if($gender==0){ return "裙子"; }else{ return "裤子"; } } }
Um die Datenbank abzufragen, habe ich eine Datenbankklasse gekapselt: find()
====Start den Test schreiben
Das erste, was ich testen muss, ist die Klasse switchClothes, aber in dieser Klasse muss ich die Datenbankklasse instanziieren und die Select-Methode verwenden, die Datenbank abfragen und dann herausfinden, ob ich Hosen oder Hosen möchte ein Rock. Es ist also wirklich zu mühsam, die Logik dieser Methode zu testen. Wenn der Benutzername nicht vorhanden ist, muss ich dann zu viel in die Datenbank gehen? Ärger und nicht gut genug. Wenn Sie eine Methode testen müssen, die die Aktualisierung von Daten umfasst, müssen Sie die Daten dann wirklich ändern?
Der Stub ist wunderbar angekommen. Mama muss sich keine Sorgen mehr machen, dass ich die Datenbank bediene, und sie muss sich auch keine Sorgen mehr machen, dass die Benutzeroberfläche unverständlich ist.
Ich kann diese Klasse stoppen. Um es einfach auszudrücken: Ich denke, es handelt sich um eine Simulation dieser Klasse und einer gefälschten Datenbankklasse.
Es ist wie oben: A=switchClothes B=Datenbankklasse D=Datenbank C=Stub-Klasse
Ursprünglich sollte A B anrufen, und B fragt die Datenbank ab. Die rote Linie ist jedoch nicht unter meiner Kontrolle und ich kann sie angeben. )-Methode innerhalb gibt 1 oder 0 zurück. Zumindest aus der Perspektive von A ist es dasselbe wie B. Wie auch immer, es wird für mich 0 oder 1 zurückgeben. Das bedeutet, dass C das System A von B und D isoliert und so die Kopplung verringert.
Dann kann ich mit der Konstruktion des C beginnen, das ich brauche.
Das ist C. Wenn Sie einen Einzeltest machen, nehmen Sie einfach den roten Weg.
<?php use PHPUnit\Framework\TestCase; class StubTest extends TestCase { public function testStub() { // 为database类建立桩件。 $stub = $this->getMockBuilder("database")//类名 ->setMethods(array('find')) //可以是多个方法 ->getMock(); // 配置桩件。 $stub->method('find')//想要设置返回值的方法 ->willReturn(0);//设置返回值 // 现在调用 $stub->select() 将返回 '裙子'。 $this->assertEquals('裙子', $stub->find()); } } ?>
alle