Yii Framework Offizieller Leitfaden zur Serie, Ergänzung 39 – Testen: Unit-Tests

黄舟
Freigeben: 2023-03-05 18:38:01
Original
1335 Leute haben es durchsucht



Da das Yii-Testframework auf PHPUnit basiert, wird empfohlen, dass Sie die PHPUnit-Dokumentation durchlesen, bevor Sie verstehen, wie man einen Komponententest schreibt. Nachfolgend fassen wir kurz die Grundprinzipien des Schreibens eines Unit-Tests in Yii zusammen:

  • Ein Unit-Test wird in Form der von CTestCase oder CDbTestCase geerbten XyzTest-Klasse geschrieben, wobei Xyz den Test darstellt Wenn wir beispielsweise die Post-Klasse testen möchten, benennen wir die Testklasse entsprechend. Die Basisklasse CTestCase ist eine allgemeine Unit-Test-Klasse, während CDbTestCase nur zum Testen von AR-Modellklassen geeignet ist 🎜>, wir können damit beginnen. Alle Methoden werden in der Klasse vererbt. PHPUnit_Framework_TestCase是这两个类的父类

  • Unit-Test-Klassen werden in PHP-Dateien in der Form von XyzTest.php gespeichert. Der Einfachheit halber werden Unit-Test-Dateien normalerweise in

    gespeichert.protected/tests/unit文件夹下

  • Die Testklasse enthält hauptsächlich eine Reihe von testAbc-Methoden, wobei Abc normalerweise die zu testende Klassenmethode ist

  • Die Testmethode enthält normalerweise eine Reihe von Behauptungsanweisungen (z. B.

    , assertTrue), als Haltepunkt zur Überprüfung des Verhaltens der Zielklasse assertEquals

Im Folgenden erklären wir hauptsächlich, wie man Unit-Tests für AR-Modellklassen schreibt wird von CDbTestCase erben, da es datenbankspezifische Statusunterstützung bietet. Wir haben den datenbankspezifischen Status im vorherigen Kapitel ausführlich besprochen

Angenommen, wir möchten die Kommentarmodellklasse im Blog-Fall testen, können wir zuerst eine erstellen Klasse mit dem Namen CommentTest und speichern Sie sie dann als

:protected/tests/unit/CommentTest.php

class CommentTest extends CDbTestCase
{
    public $fixtures=array(
        'posts'=>'Post',
        'comments'=>'Comment',
    );

    ......
}
Nach dem Login kopieren
In dieser Klasse geben wir die Mitgliedsvariable

als Array an, das die spezifischen Vorrichtungen enthält, die für diesen Test verwendet werden sollen. Dieses Array stellt die Zuordnung von einem bestimmten Statusnamen zu einer Modellklasse oder einem bestimmten Statustabellennamen dar (z. B. von fixtures zu posts). Beachten Sie, dass bei der Zuordnung zu einem bestimmten Statustabellennamen der Datentabellenname vorangestellt werden sollte mit einem Doppelpunkt (z. B. Post), um die Zuordnung zu einer Modellklasse zu unterscheiden. Bei Verwendung eines Modellklassennamens wird die entsprechende Tabelle als spezifische Statustabelle behandelt. Wie bereits beschrieben, wird bei jeder Ausführung einer Testmethode eine bestimmte Statustabelle auf einen bekannten Status zurückgesetzt. <img src="https://img.php.cn/upload/article/000/000/194/d8454295409f69752ae1c667ca9e3c2e-0.gif" alt="Yii Framework Offizieller Leitfaden zur Serie, Ergänzung 39 – Testen: Unit-Tests" class="wp-smiley"> ost

Spezifische Zustandsnamen ermöglichen uns den einfachen Zugriff auf bestimmte Zustandsdaten in Testmethoden. Der folgende Code zeigt die typische Verwendung:

// return all rows in the 'Comment' fixture table
$comments = $this->comments;
// return the row whose alias is 'sample1' in the `Post` fixture table
$post = $this->posts['sample1'];
// return the AR instance representing the 'sample1' fixture data row
$post = $this->posts('sample1');
Nach dem Login kopieren

Hinweis: Wenn eine bestimmte Statusdeklaration ihren Datentabellennamen verwendet (z. B. ), ist die dritte Verwendungsmethode oben ungültig, da der Modellklasse keine Informationen mehr zugeordnet sind Als nächstes müssen wir 'posts'=>'Yii Framework Offizieller Leitfaden zur Serie, Ergänzung 39 – Testen: Unit-Testsost' schreiben: Zuerst fügen wir einen zu überprüfenden Kommentar ein, dann überprüfen wir diesen Bewertungskommentar, indem wir Daten aus der Datenbank abrufen und die Überprüfung bestehen.

Das Obige ist der Inhalt von Yii Framework Official Guide Series Supplement 39 – Testing: Unit Testing. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)! testApprove方法在Comment模型类中测试approve方法

public function testApprove()
{
    // insert a comment in pending status
    $comment=new Comment;
    $comment->setAttributes(array(
        &#39;content&#39;=>&#39;comment 1&#39;,
        &#39;status&#39;=>Comment::STATUS_PENDING,
        &#39;createTime&#39;=>time(),
        &#39;author&#39;=>&#39;me&#39;,
        &#39;email&#39;=>[email protected]&#39;,
        &#39;postId&#39;=>$this->posts[&#39;sample1&#39;][&#39;id&#39;],
    ),false);
    $this->assertTrue($comment->save(false));

    // verify the comment is in pending status
    $comment=Comment::model()->findByPk($comment->id);
    $this->assertTrue($comment instanceof Comment);
    $this->assertEquals(Comment::STATUS_PENDING,$comment->status);

    // call approve() and verify the comment is in approved status
    $comment->approve();
    $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
    $comment=Comment::model()->findByPk($comment->id);
    $this->assertEquals(Comment::STATUS_APPROVED,$comment->status);
}
Nach dem Login kopieren

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage