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是这两个类的父类
gespeichert.protected/tests/unit文件夹下
, assertTrue
), als Haltepunkt zur Überprüfung des Verhaltens der Zielklasse assertEquals
:protected/tests/unit/CommentTest.php
class CommentTest extends CDbTestCase { public $fixtures=array( 'posts'=>'Post', 'comments'=>'Comment', ); ...... }
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
// 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');
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 (m.sbmmt.com)! testApprove方法在Comment模型类中测试approve方法
public function testApprove() { // insert a comment in pending status $comment=new Comment; $comment->setAttributes(array( 'content'=>'comment 1', 'status'=>Comment::STATUS_PENDING, 'createTime'=>time(), 'author'=>'me', 'email'=>[email protected]', 'postId'=>$this->posts['sample1']['id'], ),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); }