staabm / phpunit-cross-os

此包已废弃,不再维护。未建议替代包。

资助包维护!
staabm


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 实际上在一个类中提供了 DirSeparatorAgnosticStringComparatorEolAgnosticStringComparator 的所有功能。

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");
    }

}