Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Sambungan dan penyesuaian rangka kerja ujian unit PHP

Sambungan dan penyesuaian rangka kerja ujian unit PHP

王林
王林asal
2024-05-06 13:57:021174semak imbas

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.

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

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 kelas 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 mengesahkan sama ada nilai memenuhi syarat tertentu. Buat Matcher tersuai menggunakan pustaka prophesize:

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

DataProvider menyediakan sumber tersuai untuk data ujian. Gunakan PHPUnit_Extensions_DataProvider_ArrayDataProvider untuk mencipta DataProvider tersuai:

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

Rangka kerja tersuai

🎜1 Buat pelari tersuai🎜🎜🎜Pelari bertanggungjawab untuk executing. Buat pelari tersuai menggunakan PHPUnit_Framework_TestSuite_DataProvider: 🎜
CustomBootstrapper::bootstrap();
🎜🎜2 Override Bootstrapper🎜🎜🎜Bootstrapper Sediakan persekitaran berjalan ujian sebelum ujian dijalankan. Gunakan PHPUnit_Util_Configuration untuk mengatasi Bootstrapper: 🎜rrreee🎜🎜Kes 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn