Heim  >  Artikel  >  Backend-Entwicklung  >  Erweiterung und Anpassung des PHP-Unit-Testing-Frameworks

Erweiterung und Anpassung des PHP-Unit-Testing-Frameworks

王林
王林Original
2024-05-06 13:57:021175Durchsuche

Durch die Erweiterung und Anpassung des PHPUnit-Frameworks können Sie das Problem lösen, dass das ursprüngliche Framework Ihre Anforderungen nicht erfüllen kann. Im Hinblick auf die Erweiterung umfasst es benutzerdefinierte Assertionen, Matcher und DataProvider; im Hinblick auf die Anpassung umfasst es das Erstellen benutzerdefinierter Läufer und das Überschreiben von Bootstrapper. In praktischen Anwendungen können erweiterte Assertionen Sonderzeichen überprüfen, benutzerdefinierte Matcher können Listenelemente überprüfen und das Überschreiben von Bootstrapper kann das Ausführungszeitlimit erhöhen.

PHP 单元测试框架的扩展与定制

Erweiterung und Anpassung des PHP-Unit-Testing-Frameworks

Unit-Tests können die Codequalität erheblich verbessern, aber das native Framework erfüllt möglicherweise nicht alle Anforderungen. Durch Erweitern und Anpassen des Frameworks wird dieses Problem gelöst.

Erweiterungsmethoden

1. Benutzerdefinierte Behauptungen

PHPUnit bietet Behauptungsmethoden, aber manchmal sind benutzerdefinierte Behauptungen erforderlich. Erstellen Sie eine neue Assertionsmethode mit der Klasse Assert: Assert 类创建新的断言方法:

class CustomAssertions extends PHPUnit_Framework_Assert
{
    public static function assertTrueWithMessage($condition, string $message) {
        self::assertTrue($condition, $message);
    }
}

2. 自定义 Matcher

Matcher 验证值是否符合特定条件。使用 prophesize 库创建自定义 Matcher:

class CustomMatcher
{
    public function isEven($value)
    {
        return $value % 2 == 0;
    }
}

$propecy = $prophesize(new CustomMatcher());
$propecy->isEven(6)->shouldBeTrue();

3. 实现 DataProvider

DataProvider 为测试数据提供自定义来源。使用 PHPUnit_Extensions_DataProvider_ArrayDataProvider 创建自定义 DataProvider:

class CustomDataProvider
{
    public static function provideData()
    {
        return [
            ['foo', 'bar'],
            ['baz', 'qux']
        ];
    }
}

$dataProvider = new PHPUnit_Extensions_DataProvider_ArrayDataProvider(CustomDataProvider::provideData());

定制框架

1. 创建自定义运行器

运行器负责执行测试。使用 PHPUnit_Framework_TestSuite_DataProvider 创建自定义运行器:

class CustomTestRunner extends PHPUnit_Framework_TestSuite_DataProvider
{
    protected function setUp(): void
    {
        // 自定义设置
    }

    protected function tearDown(): void
    {
        // 自定义清理
    }
}

2. 覆盖 Bootstrapper

Bootstrapper 在测试运行之前设置测试运行环境。使用 PHPUnit_Util_Configuration

class CustomBootstrapper
{
    public static function bootstrap()
    {
        // 自定义引导
        PHPUnit_Util_Configuration::$defaultEnforceTimeLimit = 300;
    }
}

PHPUnit_Util_Configuration::$bootstrap = 'CustomBootstrapper::bootstrap';

2. Custom Matcher

Matcher überprüft, ob ein Wert bestimmte Bedingungen erfüllt. Erstellen Sie einen benutzerdefinierten Matcher mit der Bibliothek prophesize:

CustomAssertions::assertTrueWithMessage(
    strpos($string, "\t") !== false,
    "String does not contain a tab character"
);
3. Implementieren Sie DataProvider

DataProvider bietet eine benutzerdefinierte Quelle für Testdaten. Verwenden Sie PHPUnit_Extensions_DataProvider_ArrayDataProvider, um einen benutzerdefinierten DataProvider zu erstellen:

$prophesize(new CustomMatcher())->contains(['foo', 'bar'])->shouldBeTrue();

Angepasstes Framework

🎜1 Erstellen Sie einen benutzerdefinierten Runner🎜🎜🎜Der Runner ist für die Ausführung von Tests verantwortlich. Erstellen Sie einen benutzerdefinierten Läufer mit PHPUnit_Framework_TestSuite_DataProvider: 🎜
CustomBootstrapper::bootstrap();
🎜🎜2. Override Bootstrapper🎜🎜🎜Bootstrapper Richten Sie die Testlaufumgebung ein, bevor der Test ausgeführt wird. Verwenden Sie phpunit_util_configuration , um stootstrapper zu überschreiben: 🎜rrreee🎜🎜Practical Fall 🎜🎜🎜🎜 Erweiterte Behauptung: 🎜Verifizieren Sie das Vorhandensein von Sonderzeichen rrreee🎜🎜 Bootstrapper überschreiben: 🎜 Ausführungs-Timeout-Limit auf 300 Sekunden erhöhen: 🎜rrreee

Das obige ist der detaillierte Inhalt vonErweiterung und Anpassung des PHP-Unit-Testing-Frameworks. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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