Maison >développement back-end >tutoriel php >Extension et personnalisation du framework de tests unitaires PHP
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.
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èqueprophesize
: 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 dePHPUnit_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 : 🎜rrreeeCe 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!