std / assert
断言以验证方法输入/输出并带有友好的错误信息。
Requires
- php: ^7.0
- webmozart/assert: ^1.5
This package is auto-updated.
Last update: 2024-09-07 19:28:47 UTC
README
注意 这是一个 pre-v1.0.0 测试版。一些细节可能会很快改变,例如异常类和其他一些细节。但是,除了异常类本身之外(只要你不依赖于这个特定的实现细节),它应该是向后兼容的。不过,没有保证。
如何使用(快速入门)
安装
composer require std/assert
在任何地方调用(领域逻辑、实体、应用、基础设施...)
public function mySweetBusinessLogic(string $value) { return substr($value, 0, 1); // We got a bug! } // Fixed! public function mySweetBusinessLogic(string $value) { \Std\Assert::minLength($value, 1); return substr($value, 0, 1); // No longer have a bug! }
其他说明
断言类是所有静态方法,如果提供的断言不正确,则抛出\InvalidArgumentException。换句话说,你的断言,就像单元测试一样,应该是应用程序期望的。不要混淆——如果一个值必须是正确的,那么你应该调用Assert::true($val),而不是反过来。
这可以用来作为“简化的参数处理”,也可以用在其他任何地方。我确实花了很长时间才习惯以这种方式调用断言,因为它们感觉像单元测试,也许是因为这个原因,一开始会有一些不自在的感觉。然而,一旦你习惯了这种想法,你就会理解它们作为在整个系统(特别是你的领域/业务逻辑)中执行健全性检查的简单方法的价值。
Webmozart中的每个检查都有一个对应的"all"和"nullOr"。这些由一个__callStatic魔术方法处理(这没有什么不妥!),并且在类文档块中通过@method正确地类型提示和声明。
例如,allXXX,比如allNotEmpty,会断言给定数组的每个元素都通过给定的测试。也就是说,allNotEmpty会断言给定数组的每个元素都不是空的。
nullOrXXX将断言值可能是null或给定的断言。例如,nullOrEmail将断言给定的值要么是一个有效的电子邮件地址,要么是=== null。
Webmozart & 未来
这实际上,并且始终是,Bernhard Schussek的Webmozart\Assert的克隆。
他的包可以在webmozart/assert找到,如果你感兴趣的话,并且这个包目前直接依赖于它。
原始文档
断言
Assert类提供了以下断言
类型断言
比较断言
字符串断言
在使用以下断言之前,你应该用Assert::string()检查值是否为字符串。
文件断言
对象断言
数组断言
函数断言
集合断言
上述所有断言都可以使用all*()前缀来测试数组或\Traversable的内容
Assert::allIsInstanceOf($employees, 'Acme\Employee');
可空断言
上述所有断言都可以使用nullOr*()前缀来在值不是null时运行断言
Assert::nullOrString($middleName, 'The middle name must be a string or null. Got: %s');
Std\Assert
返回到Std\Assert...
未来
在未来,我想
- 找到一种干净地扩展他的工作,但增加一点灵活性。特别是,添加"
not...()" + "allNot...()"。也许我遗漏了一些反模式或模式,但简单地断言某物“不是...”相当困难。这显然更好。如果这不能干净地完成,我可能不得不分叉。 - 添加一些更多高级断言。
- 使用相同的代码,创建一个用于更非正式验证的新包(例如,通过模式定义API输入验证)。
- 使用类似系统,定义带有纠正路径的类似断言。
许可证
最重要的是,Webmozart版权所有(c)2014 Bernhard Schussek,并按照MIT许可证发布。
对于在Std\Assert中的任何进一步添加或更改,都可以免费使用,无需署名,可在以下任一许可证下使用:
版权所有(C)2019;A.B. Carroll ben@hl9.net
- Unlicense http://unlicense.org(无需署名)
- MIT许可证
- Apache 2.0许可证
- BSD 2-clause许可证
请务必提及并致谢Webmozart\Assert的作者(Bernhard Schussek),因为Std\Assert基于它。