staabm / phpunit-cross-os
Requires
- php: ^7.4 || ^8.0
- sebastian/comparator: ^4.0
Requires (Dev)
- friendsofphp/php-cs-fixer: 2.19.3
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.2
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.5
- dev-main
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2
- 0.1
- dev-dependabot/composer/friendsofphp/php-cs-fixer-3.14.4
- dev-dependabot/composer/phpunit/phpunit-tw-9.6
- dev-dependabot/composer/phpstan/phpstan-phpunit-tw-1.3
- dev-dependabot/github_actions/ramsey/composer-install-2
- dev-dependabot/composer/phpstan/phpstan-tw-1.9
- dev-dependabot/composer/phpstan/extension-installer-tw-1.2
This package is auto-updated.
Last update: 2023-03-13 23:06:42 UTC
README
非侵入式方法
一种使跨操作系统断言变得明显的的方法。
使 assertEquals*
比较在行尾(即 PHP_EOL
)字符上不可知
使用 CrossOsAgnosticComparator
使您的常规 assert*
调用了解 EolAgnosticString
作为预期类型。
use SebastianBergmann\Comparator\Factory; use staabm\PHPUnitCrossOs\Comparator\CrossOsAgnosticComparator; use staabm\PHPUnitCrossOs\Comparator\EolAgnosticString; final class MyTestCase extends TestCase { /** * @var CrossOsAgnosticComparator */ private $comparator; public function setUp(): void { $this->comparator = new CrossOsAgnosticComparator(); $factory = Factory::getInstance(); $factory->register($this->comparator); } public function tearDown(): void { $factory = Factory::getInstance(); $factory->unregister($this->comparator); } public function testStringsAreEqual() { // this assertion will be considered successfull self::assertEquals(new EolAgnosticString("hello\nworld"), "hello\r\nworld"); // works also for assertEquals* variants self::assertEqualsIgnoringCase(new EolAgnosticString("hello\nworld"), "hello\r\nWORLD"); } }
使 assertEquals*
比较在目录分隔符(即 DIRECTORY_SEPARATOR
)字符上不可知
使用 CrossOsAgnosticComparator
使您的常规 assert*
调用了解 DirSeparatorAgnosticString
作为预期类型。
use SebastianBergmann\Comparator\Factory; use staabm\PHPUnitCrossOs\Comparator\CrossOsAgnosticComparator; use staabm\PHPUnitCrossOs\Comparator\DirSeparatorAgnosticString; final class MyTestCase extends TestCase { /** * @var CrossOsAgnosticComparator */ private $comparator; public function setUp(): void { $this->comparator = new CrossOsAgnosticComparator(); $factory = Factory::getInstance(); $factory->register($this->comparator); } public function tearDown(): void { $factory = Factory::getInstance(); $factory->unregister($this->comparator); } public function testStringsAreEqual() { // this assertion will be considered successfull self::assertEquals(new DirSeparatorAgnosticString("hello\\world"), "hello/world"); // works also for assertEquals* variants self::assertEqualsIgnoringCase(new DirSeparatorAgnosticString("hello\\world"), "hello/WORLD"); } }
使 assertEquals*
比较在跨操作系统上不可知
使用 CrossOsAgnosticComparator
使您的常规 assert*
调用了解 CrossOsAgnosticString
作为预期类型。
use SebastianBergmann\Comparator\Factory; use staabm\PHPUnitCrossOs\Comparator\CrossOsAgnosticComparator; use staabm\PHPUnitCrossOs\Comparator\CrossOsAgnosticString; final class MyTestCase extends TestCase { /** * @var CrossOsAgnosticComparator */ private $comparator; public function setUp(): void { $this->comparator = new CrossOsAgnosticComparator(); $factory = Factory::getInstance(); $factory->register($this->comparator); } public function tearDown(): void { $factory = Factory::getInstance(); $factory->unregister($this->comparator); } public function testStringsAreEqual() { // this assertion will be considered successfull self::assertEquals(new CrossOsAgnosticString("hello\\world"), "hello/world"); // works also for assertEquals* variants self::assertEqualsIgnoringCase(new CrossOsAgnosticString("hello\\world"), "hello/WORLD"); } }
侵入式方法
使用 PHP 内置断言测试跨操作系统相关内容的测试方法。您可能不喜欢它,因为您的 assertEquals()
调用将根据提供的参数表现出不同的行为,使您的测试感觉有点魔法般。
使 assertEquals*
比较在行尾(即 PHP_EOL
)字符上不可知
使用 EolAgnosticStringComparator
使您的常规 assert*
调用即使在比较的字符串在行尾字符上有所不同时也能成功。
use SebastianBergmann\Comparator\Factory; use staabm\PHPUnitCrossOs\Comparator\EolAgnosticStringComparator; final class MyTestCase extends TestCase { /** * @var EolAgnosticStringComparator */ private $comparator; public function setUp(): void { $this->comparator = new EolAgnosticStringComparator(); $factory = Factory::getInstance(); $factory->register($this->comparator); } public function tearDown(): void { $factory = Factory::getInstance(); $factory->unregister($this->comparator); } public function testStringsAreEqual() { // this assertion will be considered successfull self::assertEquals("hello\nworld", "hello\r\nworld"); // works also for assertEquals* variants self::assertEqualsIgnoringCase("hello\nworld", "hello\r\nWORLD"); } }
使 assertEquals*
比较在目录分隔符(即 DIRECTORY_SEPARATOR
)字符上不可知
使用 DirSeparatorAgnosticStringComparator.php
来确保即使在目录分隔符不同的字符串之间,您的 assert*
-调用也能成功。
use SebastianBergmann\Comparator\Factory; use staabm\PHPUnitCrossOs\Comparator\DirSeparatorAgnosticStringComparator; final class MyTestCase extends TestCase { /** * @var DirSeparatorAgnosticStringComparator */ private $comparator; public function setUp(): void { $this->comparator = new DirSeparatorAgnosticStringComparator(); $factory = Factory::getInstance(); $factory->register($this->comparator); } public function tearDown(): void { $factory = Factory::getInstance(); $factory->unregister($this->comparator); } public function testStringsAreEqual() { // this assertion will be considered successfull self::assertEquals("hello\\world", "hello/world"); // works also for assertEquals* variants self::assertEqualsIgnoringCase("hello\\world", "hello/WORLD"); } }
使 assertEquals*
比较跨操作系统无关
使用 CrossOsAgnosticStringComparatorFunctionalTest.php
来确保即使在目录分隔符和/或行结束字符不同的情况下,您的常规 assert*
-调用也能成功。
CrossOsAgnosticStringComparatorFunctionalTest
实际上在一个类中提供了 DirSeparatorAgnosticStringComparator
和 EolAgnosticStringComparator
的所有功能。
use SebastianBergmann\Comparator\Factory; use staabm\PHPUnitCrossOs\Comparator\CrossOsAgnosticStringComparatorFunctionalTest; final class MyTestCase extends TestCase { /** * @var CrossOsAgnosticStringComparatorFunctionalTest */ private $comparator; public function setUp(): void { $this->comparator = new CrossOsAgnosticStringComparatorFunctionalTest(); $factory = Factory::getInstance(); $factory->register($this->comparator); } public function tearDown(): void { $factory = Factory::getInstance(); $factory->unregister($this->comparator); } public function testStringsAreEqual() { // this assertion will be considered successfull self::assertEquals("hello\\world\n", "hello/world\r\n"); // works also for assertEquals* variants self::assertEqualsIgnoringCase("hello\\world\r\n", "hello/WORLD\n"); } }