webmozarts / strict-phpunit
在PHPUnit中启用对象的类型安全比较
7.12.0
2024-08-15 16:11 UTC
Requires
- php: ^8.1
- phpunit/phpunit: ^9.4.3 || ^10.3
Requires (Dev)
- ergebnis/composer-normalize: ^2.28
- infection/infection: ^0.26.6
- dev-main
- 7.12.0
- 7.11.19
- 7.11.18
- 7.11.17
- 7.11.16
- 7.11.15
- 7.11.14
- 7.11.13
- 7.11.12
- 7.11.11
- 7.11.10
- 7.11.9
- 7.11.8
- 7.11.7
- 7.11.6
- 7.11.5
- 7.11.4
- 7.11.3
- 7.11.1
- 7.11.0
- 7.10.1
- 7.10.0
- 7.9.x-dev
- 7.9.3
- 7.9.2
- 7.9.1
- 7.9.0
- 7.8.x-dev
- 7.8.0
- 7.7.x-dev
- 7.7.7
- 7.7.6
- 7.7.5
- 7.7.4
- 7.7.3
- 7.7.2
- 7.7.1
- 7.7.0
- 7.6.x-dev
- 7.6.6
- 7.6.5
- 7.6.4
- 7.6.3
- 7.6.2
- 7.6.1
- 7.6.0
- 7.5.x-dev
- 7.5.4
- 7.5.3
- 7.5.2
- 7.5.1
- 7.5.0
- 7.4.x-dev
- 7.4.1
- 7.4.0
- 7.3.x-dev
- 7.3.3
- 7.3.2
- 7.3.1
- 7.3.0
- 7.2.10
- 7.2.9
- 7.2.8
- 7.2.7
- 7.2.6
- 7.2.5
- 7.2.4
- 7.2.3
- 7.2.2
- 7.2.1
- 7.2.0
- 7.1.1
- 7.1.0
- 7.0.5
- 7.0.4
- 7.0.3
- 7.0.2
- 7.0.1
- 7.0.0
- 7.0.0-beta.5
- 7.0.0-beta.4
- 7.0.0-beta.3
- 7.0.0-beta.2
- 7.0.0-beta.1
- dev-bugfix/version
- dev-feature/dependencies
This package is auto-updated.
Last update: 2024-09-12 16:26:24 UTC
README
在PHPUnit中启用对象的类型安全比较。
问题
PHPUnit有一个非常强大的比较系统,可以帮助你比较对象与预期值。
class ValueObject { public ?string $property; public function __construct(?string $property) { $this->property = $property; } } $actual = new ValueObject('foo!'); self::assertEquals(new ValueObject('foo'), $actual); // => fails with a very helpful error message
这个比较系统会给你一个有意义的异常,引导你精确地找到导致断言失败的错误。字符串还会进行差异比较,以便你看到哪个字符导致字符串不匹配。
PHPUnit会将对象的每个标量属性与宽松的类型进行比较。它在底层使用==
时稍微聪明一些,但仍然不能总是提供你想要的结果
var_dump('Hi' == true); // => true self::assertEquals(new ValueObject('Hi'), new ValueObject(true)); // => fails var_dump('' == null); // => true self::assertEquals(new ValueObject(''), new ValueObject(null)); // => succeeds
解决方案
此扩展为标量值启用了一个比较器,以解决此问题。使用此扩展,每当PHPUnit在assertEquals()
(甚至在对象或数组中递归地)期间找到标量值时,它都会使用===
进行比较。
对象仍然不检查身份,因此你仍然可以构造示例对象进行比较。
错误消息仍然有意义。
self::assertEquals(new ValueObject(''), new ValueObject(null)); // => fails with a meaningful error self::assertEquals(new ValueObject('foo!'), new ValueObject('foo')); // => fails with a meaningful error self::assertEquals(new ValueObject('foo!'), new ValueObject('foo!')); // => succeeds
安装
可以使用Composer安装此扩展
$ composer require --dev webmozarts/strict-phpunit
将扩展添加到您的phpunit.xml.dist
文件中以启用它
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"> <!-- ... --> <extensions> <extension class="Webmozarts\StrictPHPUnit\StrictPHPUnitExtension"/> </extensions> <!-- ... --> </phpunit>
作者
贡献
欢迎为该包做出贡献!
请注意,此仓库是单体仓库的子树分割,因此为只读。PR将移植到(内部)单体仓库。
许可
本包所有内容均使用MIT许可授权。