pr0ggy / kanta
PHP 5.6 及以上版本的一个易于使用的基于异常的函数断言库
Requires
- php: >=5.6.0
- sebastian/comparator: ^1.2
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2021-06-12 09:26:33 UTC
README
PHP 5.6 及以上版本的一个易于使用的基于异常的断言库
安装
composer require --dev pr0ggy/kanta
断言API
Kanta 的目标只有一个:提供一个简洁、易读的断言API,尽可能详细、易读,同时尽可能轻量。Kanta 有一个单参数的 assert 函数,该参数是一个描述断言的字典。如果断言失败,将抛出一个 Kanta\Validation\AssertionFailureException 实例,其中包含解释断言失败原因的消息。主要有两种断言类型:关于值/数组/对象的断言,或关于从给定可调用对象中抛出的预期异常的断言。
对值/对象/数组的断言
<?php use Kanta\Validation as v; // ... v\assert([ 'that' => new RuntimeException('something failed', 5001), 'satisfies' => [ v\isTypeOf('Exception'), v\hasProperty('message', 'something failed'), v\hasProperty('code', 5001) ], 'orFailBecause' => 'The created exception was not as expected' ]); // ...
对值/对象/数组进行的断言由以下三个键描述
- that:定义了验证的主题
- satisfies:定义了一个或多个将接收验证主题作为参数的验证器可调用对象。如果这些验证器中的任何一个失败,则断言失败。
- orFailBecause:定义了断言失败的原因摘要
对可调用对象抛出的预期异常的断言
<?php use Kanta\Validation as v; // ... v\assert([ 'thatCalling' => [$someObject, 'someMethod'], 'withArgs' => ['foo'], 'throwsExceptionSatisfying' => [ v\isTypeOf('Exception'), v\hasProperty('message', 'something failed') ], 'orFailBecause' => 'Calling subject::someMethod("foo") did not throw the expected exception' ]); // ...
对可调用对象抛出的异常进行的断言由以下键描述
- thatCalling:定义了验证的可调用主题
- withArgs:(可选)定义了在测试期间传递给可调用的参数
- throwsExceptionSatisfying:定义了一个或多个将接收可调用对象预期抛出的异常作为参数的验证器可调用对象。如果这些验证器中的任何一个失败,或者可调用主题未能抛出异常,则断言失败。
- orFailBecause:定义了断言失败的原因摘要
验证器
如上所述,验证器只是作为断言数据传递的调用对象,它们将接受断言的主题作为参数,并成功返回或抛出一个 Kanta\Validation\ValidationFailureException 实例。Kanta 在 Kanta\Validation 命名空间中提供了一些内置的验证器生成函数,应该可以满足广泛的断言需求
is($referenceValue)
如果验证的主题不是严格等于给定的参考值,则失败
isInstanceOf($expectedClassName)
如果验证的主题不是给定类名的实例,则失败。注意,类名必须完全匹配……子类将不会通过。
isTypeOf($typeNameExpected)
如果验证的主题与给定的类型(类或接口)不匹配,则失败。与isInstanceOf()不同,接口名称是被允许的,并且给定期望类名的子类将通过。
isObject()
如果验证的主题不是一个对象,则失败
hasKeys(...$keysExpected)
如果验证的主题没有指定的键(或者主题不是一个有效的键/值存储),则失败
hasKVPair($key, $value)
如果验证的主题没有指定的键/值对(或者主题不是一个有效的键/值存储),则失败
hasValues(...$valuesExpected)
如果验证的主题不是一个数组或具有给定值的Traversable实例,则失败
hasCountOf($n)
如果验证的主题不是一个数组或具有给定项目计数的Countable实例,则失败
hasProperty($propertyName, $propertyValueExpected = null)
如果验证的主题不是一个包含给定属性的对象,则失败。如果期望的值参数非空,则如果属性的值不严格相等,则验证将失败。请注意,此方法将首先检查格式为get<PropertyName>的属性获取器是否存在,然后再直接访问属性。
显式通过/失败测试
在某些测试中,存在显式通过/失败的合理场景,因此提供了在Kanta\Validation命名空间内的函数。
pass()
无操作...因为Kanta是基于异常的,此函数仅用于在特定测试用例中的可读性。
fail($message)
显式抛出具有给定消息的Kanta\Validation\AssertionFailureException实例。
测试Kanta
./vendor/bin/phpunit
许可
MIT