Dengan memanjangkan dan menyesuaikan rangka kerja PHPUnit, anda boleh menyelesaikan masalah yang rangka kerja asal tidak dapat memenuhi keperluan anda. Dari segi pelanjutan, ia termasuk penegasan tersuai, Matcher dan Penyedia Data dari segi penyesuaian, ia melibatkan penciptaan pelari tersuai dan Bootstrapper yang mengatasi. Dalam aplikasi praktikal, penegasan lanjutan boleh mengesahkan aksara khas, Matchers tersuai boleh mengesahkan elemen senarai, dan Bootstrapper yang mengatasi boleh meningkatkan had tamat masa pelaksanaan.
Pelanjutan dan penyesuaian rangka kerja ujian unit PHP
Ujian unit boleh meningkatkan kualiti kod dengan ketara, tetapi rangka kerja asli mungkin tidak memenuhi semua keperluan. Memperluas dan menyesuaikan rangka kerja menyelesaikan masalah ini.
Kaedah lanjutan
1. Penegasan tersuai
PHPUnit menyediakan kaedah penegasan, tetapi kadangkala penegasan tersuai diperlukan. Cipta kaedah penegasan baharu menggunakan kelasAssert
: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 mengesahkan sama ada nilai memenuhi syarat tertentu. Buat Matcher tersuai menggunakan pustakaprophesize
:
CustomAssertions::assertTrueWithMessage( strpos($string, "\t") !== false, "String does not contain a tab character" );
DataProvider menyediakan sumber tersuai untuk data ujian. GunakanPHPUnit_Extensions_DataProvider_ArrayDataProvider
untuk mencipta DataProvider tersuai:
$prophesize(new CustomMatcher())->contains(['foo', 'bar'])->shouldBeTrue();
Rangka kerja tersuai
1 Buat pelari tersuaiPelari bertanggungjawab untuk executing. Buat pelari tersuai menggunakanPHPUnit_Framework_TestSuite_DataProvider
:
CustomBootstrapper::bootstrap();
PHPUnit_Util_Configuration
untuk mengatasi Bootstrapper: rrreeeKes praktikal Pernyataan lanjutan: Sahkan kehadiran aksara khas: rrreee yang mengandungi elemen Matcher:V yang mengandungi Matcher:V rrreee Gantikan Bootstrapper: Tingkatkan had tamat masa pelaksanaan kepada 300 saat: rrreee
Atas ialah kandungan terperinci Sambungan dan penyesuaian rangka kerja ujian unit PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!