Heim > Artikel > Backend-Entwicklung > Yii Framework Official Guide Series Supplement 37 – Testen: Übersicht
Testen ist ein wesentlicher Bestandteil der Softwareentwicklung. Ob wir uns dessen bewusst sind oder nicht, bei der Entwicklung von Webanwendungen testen wir immer. Wenn wir eine Klasse in PHP schreiben, verwenden wir möglicherweise einige Injektionsanweisungen echo
oder die
, um zu zeigen, ob wir eine bestimmte Methode korrekt implementiert haben Versuchen Sie möglicherweise, einige Testdaten einzugeben, um zu bestätigen, ob die Seite wie erwartet interagiert. Fortgeschrittenere Entwickler schreiben Code, um diesen Testvorgang automatisch abzuschließen, sodass wir bei jedem Testvorgang nur den Code aufrufen und verlassen müssen Dies wird als automatisiertes Testen bezeichnet und ist das Hauptthema dieses Kapitels.
Die von Yii bereitgestellte Testunterstützung umfasst Unit-Tests und Funktionstests.
Unit-Tests überprüfen, ob eine unabhängige Codeeinheit wie erwartet funktioniert. Die grundlegendste Codeeinheit ist daher eine Klasse Um zu überprüfen, ob jede von dieser Klasse implementierte Methode normal funktioniert, werden Unit-Tests normalerweise von der Person geschrieben, die diese Klasse entwickelt hat.
Funktionstests überprüfen, ob die Funktion wie erwartet funktioniert (z. B. ein Commit-Vorgang in einem Blog-System). Im Vergleich zu Unit-Tests sind Funktionstests in der Regel fortgeschrittener, da die zu testende Funktion häufig von jemandem geschrieben wird, der die Systemanforderungen sehr gut kennt Ingenieur).
Das Folgende zeigt, was als Testgetriebene Entwicklung (TDD) bezeichnet wird:
Erstellen Ein neuer Test, der die zu implementierende Funktion abdeckt, wird voraussichtlich bei der ersten Ausführung fehlschlagen, da die Funktion noch nicht implementiert wurde.
Führen Sie alle Tests aus, um sicherzustellen, dass dieser neue Test ausgeführt wird schlägt fehl.
Schreiben Sie Code, damit die Tests erfolgreich sind.
Führen Sie alle Tests aus und stellen Sie sicher, dass alle Tests erfolgreich sind.
Refaktorieren Sie den neu geschriebenen Code und stellen Sie sicher, dass diese Tests weiterhin bestehen.
Wiederholen Sie die Schritte 1 bis 5, um die Implementierung der Gesamtfunktion zu fördern.
Die von Yii bereitgestellte Testunterstützung erfordert PHPUnit 3.5+ und Selenium Remote Control 1.0+. (Um PHPUnit unter Linux zu installieren, lesen Sie bitte diesen Artikel: Detaillierte Schritte und Fehlerlösungen für die Installation von PHPUnit unter Ubuntu. Um PHPUnit unter Windows zu installieren, lesen Sie bitte diesen Artikel: Detailliertes Tutorial zur Installation von Pear und PHPUnit unter Windows. Die Selenium-Downloadadresse ist hier: Klicken Sie auf „Herunterladen“)
Wenn wir den Konsolenbefehl yiic webapp
verwenden, um eine neue Yii-Anwendung zu erstellen, werden die folgenden Dateien und Verzeichnisse generiert, damit wir Tests schreiben und abschließen können.
testdrive/ protected/ 包含了受保护的应用文件 tests/ 包含了应用测试 fixtures/ 包含了数据 fixtures functional/ 包含了功能测试 unit/ 包含了单元测试 report/ 包含了 coverage 报告 bootstrap.php 这个脚本在一开始执行 phpunit.xml PHPUnit 配置文件 WebTestCase.php 基于 Web 的功能测试基类
Wie oben gezeigt, wird unser Testcode hauptsächlich in den drei Verzeichnissen fixtures
, functional
und unit
abgelegt. Das Verzeichnis report
wird zum Speichern des generierten Codeabdeckungsberichts
verwendet Wir können den folgenden Befehl im Konsolenfenster ausführen, um den Test auszuführen (egal, ob es sich um einen Komponententest oder einen Funktionstest handelt):
% cd testdrive/protected/tests % phpunit functional/PostTest.php // 执行单个测试 % phpunit --verbose functional // 执行 'functional' 下的所有测试 % phpunit --coverage-html ./report unit
Der letzte Befehl oben führt alle Tests im unit
aus Verzeichnis und dann im Verzeichnis report
Ein Code-Abdeckungsbericht wird im Verzeichnis generiert. Beachten Sie, dass Sie zum Generieren eines Code-Abdeckungsberichts die xdebug-Erweiterung von PHP installieren und aktivieren müssen.
Schauen Sie sich an, was in der bootstrap.php
-Datei enthalten ist. Zunächst einmal ist diese Datei etwas Besonderes, da sie einem Eintragsskript sehr ähnlich ist und auch der Eintrag ist Grund für uns, eine Reihe von Tests durchzuführen
$yiit='path/to/yii/framework/yiit.php'; $config=dirname(__FILE__).'/../config/test.php'; require_once($yiit); require_once(dirname(__FILE__).'/WebTestCase.php'); Yii::createWebApplication($config);
Wie oben gezeigt, schließen wir zuerst das -Datei vom Yii-Framework, die einige globale Konstanten und notwendige Testbasisklassen initialisiert. Dann verwenden wir die yiit.php
-Konfigurationsdatei, um eine Anwendungsinstanz zu erstellen. Wenn Sie sich die test.php
-Datei ansehen, werden Sie feststellen, dass sie von der Datei erbt test.php
Konfigurationsdatei, aber es wird eine zusätzliche Klasse namens CDbFixtureManager hinzugefügt main.php
Anwendungskomponenten Wir werden Fixtures im nächsten Abschnitt im Detail vorstellen. Beim Testen von Datenbankvorgängen sollten wir eine dedizierte Datenbank zum Testen bereitstellen, damit die Testausführung nicht erfolgt In diesem Fall müssen wir die Kommentare der fixture
-Konfiguration oben entfernen und dann das
Durch ein solches Startskript können wir beim Ausführen des Komponententests eine Anwendungsinstanz erhalten, die den Dienstanforderungen ähnelt. Der Hauptunterschied besteht darin, dass der Test über einen Fixture-Manager und eine eigene Testdatenbank verfügt .
Tutorials zur Testreihe:
return CMap::mergeArray( require(dirname(__FILE__).'/main.php'), array( 'components'=>array( 'fixture'=>array( 'class'=>'system.test.CDbFixtureManager', ), /* 去除以下注释可为测试提供一个数据库连接. 'db'=>array( 'connectionString'=>'DSN for test database', ), */ ), ) );Offizieller Yii-Framework-Leitfaden, Serie 38 – Definieren spezifischer Zustände (Fixtures)
Offizieller Yii-Framework-Leitfaden, Serie 39 – Unit-Tests
db
Yii Framework Offizieller Leitfaden Serie 40 – Testen: Funktionstests connectionString
Das Obige ist der Inhalt von Yii Framework Official Guide Series Supplement 37 – Testing: Overview Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!