Yii Framework Official Guide Series Supplement 37 – Testen: Übersicht

黄舟
Freigeben: 2023-03-05 18:34:01
Original
1118 Leute haben es durchsucht



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).

1. Testgetriebene Entwicklung

Das Folgende zeigt, was als Testgetriebene Entwicklung (TDD) bezeichnet wird:

  1. 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.

  2. Führen Sie alle Tests aus, um sicherzustellen, dass dieser neue Test ausgeführt wird schlägt fehl.

  3. Schreiben Sie Code, damit die Tests erfolgreich sind.

  4. Führen Sie alle Tests aus und stellen Sie sicher, dass alle Tests erfolgreich sind.

  5. 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.

2. Erstellen Sie eine Testumgebung

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 的功能测试基类
Nach dem Login kopieren

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
Nach dem Login kopieren

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.

3 Schauen Sie sich das Test-Boot-Skript an

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);
Nach dem Login kopieren

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

-Attribut ausfüllen. Der DSN (Datenquellenname) wird zum Herstellen einer Verbindung verwendet


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',
            ),
            */
        ),
    )
);
Nach dem Login kopieren
Offizieller Yii-Framework-Leitfaden, Serie 38 – Definieren spezifischer Zustände (Fixtures)

Offizieller Yii-Framework-Leitfaden, Serie 39 – Unit-Tests

dbYii 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)!


Verwandte Etiketten:
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