Maison >développement back-end >tutoriel php >Extension et personnalisation du framework de tests unitaires PHP

Extension et personnalisation du framework de tests unitaires PHP

王林
王林original
2024-05-06 13:57:021225parcourir

En étendant et en personnalisant le framework PHPUnit, vous pouvez résoudre le problème selon lequel le framework d'origine ne peut pas répondre à vos besoins. En termes d'extension, cela inclut des assertions personnalisées, Matcher et DataProvider ; en termes de personnalisation, cela implique la création de coureurs personnalisés et le remplacement de Bootstrapper. Dans les applications pratiques, les assertions étendues peuvent vérifier les caractères spéciaux, les Matchers personnalisés peuvent vérifier les éléments de la liste et le remplacement de Bootstrapper peut augmenter le délai d'expiration d'exécution.

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

Extension et personnalisation du framework de tests unitaires PHP

Les tests unitaires peuvent améliorer considérablement la qualité du code, mais le framework natif peut ne pas répondre à tous les besoins. L'extension et la personnalisation du framework résolvent ce problème.

Méthodes d'extension

1. Assertions personnalisées

PHPUnit fournit des méthodes d'assertion, mais parfois des assertions personnalisées sont nécessaires. Créez une nouvelle méthode d'assertion à l'aide de la classe 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 vérifie si une valeur répond à des conditions spécifiques. Créez un Matcher personnalisé à l'aide de la bibliothèque prophesize :

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

DataProvider fournit une source personnalisée pour les données de test. Utilisez PHPUnit_Extensions_DataProvider_ArrayDataProvider pour créer un DataProvider personnalisé :

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

Cadre personnalisé

🎜1 Créer un runner personnalisé🎜🎜🎜Le runner est responsable de l'exécution des tests. Créez un exécuteur personnalisé à l'aide de PHPUnit_Framework_TestSuite_DataProvider : 🎜
CustomBootstrapper::bootstrap();
🎜🎜2. Remplacer Bootstrapper🎜🎜🎜Bootstrapper Configurez l'environnement d'exécution du test avant l'exécution du test. Utilisez PHPUnit_Util_Configuration pour remplacer Bootstrapper : 🎜rrreee🎜🎜Cas pratique 🎜🎜🎜🎜Assertion étendue : 🎜Vérifiez la présence de caractères spéciaux : 🎜rrreee🎜🎜Custom Matcher : 🎜Vérifiez que la liste contient des éléments : 🎜 rrreee🎜🎜 Remplacer Bootstrapper : 🎜 Augmenter le délai d'expiration d'exécution à 300 secondes : 🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn