php-forge/support
Composer 安装命令:
composer require --dev php-forge/support
包简介
Support utilities for enhanced testing capabilities.
关键字:
README 文档
README
Support
Support utilities for PHPUnit-focused development
Reflection helpers, line ending normalization, and filesystem cleanup for deterministic tests.
Features
Installation
composer require php-forge/support:^0.2 --dev
Quick start
This package provides helper classes for PHPUnit tests.
It supports reflection-based access to non-public members, deterministic string comparisons across platforms, and filesystem cleanup for isolated test environments.
Accessing private properties
<?php declare(strict_types=1); use PHPForge\Support\ReflectionHelper; use PHPUnit\Framework\TestCase; final class AccessPrivatePropertyTest extends TestCase { public function testInaccessibleProperty(): void { $object = new class () { private string $secretValue = 'hidden'; }; $value = ReflectionHelper::inaccessibleProperty($object, 'secretValue'); self::assertSame('hidden', $value); } }
Invoking protected methods
<?php declare(strict_types=1); use PHPForge\Support\ReflectionHelper; use PHPUnit\Framework\TestCase; final class InvokeProtectedMethodTest extends TestCase { public function testInvokeMethod(): void { $object = new class () { protected function calculate(int $a, int $b): int { return $a + $b; } }; $result = ReflectionHelper::invokeMethod($object, 'calculate', [5, 3]); self::assertSame(8, $result); } }
Normalize line endings
<?php declare(strict_types=1); use PHPForge\Support\LineEndingNormalizer; use PHPUnit\Framework\TestCase; final class NormalizeLineEndingsTest extends TestCase { public function testNormalizedComparison(): void { self::assertSame( LineEndingNormalizer::normalize("Foo\r\nBar"), LineEndingNormalizer::normalize("Foo\nBar"), ); } }
Remove files from directory
<?php declare(strict_types=1); use PHPForge\Support\DirectoryCleaner; use PHPUnit\Framework\TestCase; final class RemoveFilesFromDirectoryTest extends TestCase { public function testCleanup(): void { $testDir = sys_get_temp_dir() . '/php-forge-support-' . bin2hex(random_bytes(8)); mkdir($testDir); try { file_put_contents($testDir . '/artifact.txt', 'test'); file_put_contents($testDir . '/.gitignore', "*\n"); DirectoryCleaner::clean($testDir); self::assertFileDoesNotExist($testDir . '/artifact.txt'); self::assertFileExists($testDir . '/.gitignore'); } finally { @unlink($testDir . '/.gitignore'); @rmdir($testDir); } } }
Set inaccessible property
<?php declare(strict_types=1); use PHPForge\Support\ReflectionHelper; use PHPUnit\Framework\TestCase; final class SetInaccessiblePropertyTest extends TestCase { public function testSetProperty(): void { $object = new class () { private string $config = 'default'; }; ReflectionHelper::setInaccessibleProperty($object, 'config', 'test-mode'); $newValue = ReflectionHelper::inaccessibleProperty($object, 'config'); self::assertSame('test-mode', $newValue); } }
Enum data provider
Use PHPForge\Support\EnumDataProvider to build deterministic datasets from UnitEnum::cases() and normalized enum values.
Attribute fragment output (HTML)
<?php declare(strict_types=1); namespace App\Tests; use PHPForge\Support\EnumDataProvider; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use UnitEnum; enum Size { case Small; case Large; } final class EnumDataProviderHtmlTest extends TestCase { public static function provideEnumAttributes(): array { return EnumDataProvider::attributeCases(Size::class, 'data-size', true); } #[DataProvider('provideEnumAttributes')] public function testBuildsAttributeFragment(UnitEnum $case, array $args, string $expected, string $message): void { $normalized = $case->name; $attributeFragment = " data-size=\"{$normalized}\""; self::assertSame($expected, $attributeFragment, $message); } }
Enum instance output (non-HTML)
<?php declare(strict_types=1); namespace App\Tests; use PHPForge\Support\EnumDataProvider; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; use UnitEnum; enum State { case Active; case Disabled; } final class EnumDataProviderEnumTest extends TestCase { public static function provideEnumInstances(): array { return EnumDataProvider::attributeCases(State::class, 'state', false); } #[DataProvider('provideEnumInstances')] public function testReturnsEnumInstance(UnitEnum $case, array $args, UnitEnum $expected, string $message): void { self::assertSame($case, $expected, $message); } }
Tag cases
<?php declare(strict_types=1); namespace App\Tests; use PHPForge\Support\EnumDataProvider; use PHPUnit\Framework\Attributes\DataProvider; use PHPUnit\Framework\TestCase; enum Heading { case H1; case H2; } final class EnumDataProviderTagCasesTest extends TestCase { public static function provideTags(): array { return EnumDataProvider::tagCases(Heading::class, 'heading'); } #[DataProvider('provideTags')] public function testProvidesNormalizedTag(Heading $case, string $normalized): void { self::assertSame($case->name, $normalized); } }
Documentation
For detailed configuration options and advanced usage.
Package information
Quality code
Our social networks
License
php-forge/support 适用场景与选型建议
php-forge/support 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 81.63k 次下载、GitHub Stars 达 1, 最近一次更新时间为 2023 年 07 月 01 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「testing」 「tests」 「support」 「php-forge」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 php-forge/support 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 php-forge/support 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 php-forge/support 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Testing Suite For Lumen like Laravel does.
A cli tool which generates unit tests.
Swoole server process management
Laravel tool benchmark
A library that allows you to easily use the PHP-VCR library in your PHPUnit tests.
The PHP SDK for Checkmango
统计信息
- 总下载量: 81.63k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 40
- 推荐数: 0
其他信息
- 授权协议: BSD-3-Clause
- 更新时间: 2023-07-01