std/assert

断言以验证方法输入/输出并带有友好的错误信息。

dev-master 2019-11-07 07:36 UTC

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基于它。