refinery29 / test-util
提供测试助手、通用数据提供者和断言。
此包的官方仓库似乎已消失,因此包已被冻结。
0.11.4
2017-06-02 17:22 UTC
Requires
- php: ^5.6 || ^7.0
- beberlei/assert: ^2.7.3
- fzaninotto/faker: ^1.5.1
- zendframework/zend-file: ^2.7.1
Requires (Dev)
- codeclimate/php-test-reporter: 0.4.4
- phpunit/phpunit: ^5.7.15
- refinery29/php-cs-fixer-config: 0.6.15
Suggests
- phpunit/phpunit: If you want to make use of the assertions provided with the TestHelper
This package is not auto-updated.
Last update: 2024-06-05 22:29:34 UTC
README
提供测试助手、通用数据提供者和断言。
安装
运行
$ composer require refinery29/test-util
用法
测试助手
如果您想使用测试助手,请导入 Refinery29\Test\Util\TestHelper
特性!
namespace Acme\Test; use PHPUnit\Framework; use Refinery29\Test\Util\TestHelper; final class WebsiteTest extends Framework\TestCase { use TestHelper; }
额外的断言
测试助手提供了一些断言
assertClassesAreAbstractOrFinal($path, array $excludeDirectories = [])
assertClassesSatisfy(callable $specification, $path, array $excludeDirectories = [])
assertFinal($className)
assertExtends($parentClassName, $className)
assertImplements($interfaceName, $className)
assertClassesSatisfy(callable $specification, $path, array $excludeDirectories = [])
可调用函数将传入一个 ReflectionClass
实例,可用于进一步内省,并且应返回一个 bool
,表示满足规范。
例如
$this->assertClassesSatisfy( function (\ReflectionClass $reflection) { return false !== \strpos('MySmallClass', $reflection->getName()); }, __DIR__ );
使用 Faker 生成假数据
使用以下方式使用 Faker 懒加载 Faker\Generator
实例(参见 fzaninotto/faker
)
getFaker($locale = 'en_US') : \Faker\Generator
从值数组中提供数据
使用以下方式快速从值数组中提供数据
provideData(array $data) : \Generator
从多个具体数据提供者中提供数据
使用以下方式快速从多个具体数据提供者中提供数据
provideDataFrom(...$dataProviders) : \Generator
从多个具体数据提供者中提供数据的组合
使用以下方式快速组合来自多个具体数据提供者的数据
provideCombinedDataFrom(...$dataProviders) : array
数据提供者
如果您需要断言无效值被拒绝,可以使用以下数据提供者之一
Refinery29\Test\Util\DataProvider\BlankString
Refinery29\Test\Util\DataProvider\InvalidBoolean
Refinery29\Test\Util\DataProvider\InvalidBooleanNotNull
Refinery29\Test\Util\DataProvider\InvalidFloat
Refinery29\Test\Util\DataProvider\InvalidFloatNotNull
Refinery29\Test\Util\DataProvider\InvalidInteger
Refinery29\Test\Util\DataProvider\InvalidIntegerNotNull
Refinery29\Test\Util\DataProvider\InvalidIntegerish
Refinery29\Test\Util\DataProvider\InvalidIntegerishNotNull
Refinery29\Test\Util\DataProvider\InvalidIsoDate
Refinery29\Test\Util\DataProvider\InvalidIsoDateNotNull
Refinery29\Test\Util\DataProvider\InvalidJsonString
Refinery29\Test\Util\DataProvider\InvalidNumeric
Refinery29\Test\Util\DataProvider\InvalidNumericNotNull
Refinery29\Test\Util\DataProvider\InvalidScalar
Refinery29\Test\Util\DataProvider\InvalidScalarNotNull
Refinery29\Test\Util\DataProvider\InvalidString
Refinery29\Test\Util\DataProvider\InvalidStringNotNull
Refinery29\Test\Util\DataProvider\InvalidUrl
Refinery29\Test\Util\DataProvider\InvalidUrlNotNull
Refinery29\Test\Util\DataProvider\InvalidUuid
Refinery29\Test\Util\DataProvider\InvalidUuidNotNull
如果您需要通用值,可以使用以下数据提供者之一
Refinery29\Test\Util\DataProvider\Boolean
Refinery29\Test\Util\DataProvider\EmptyValue
Refinery29\Test\Util\DataProvider\Falsy
Refinery29\Test\Util\DataProvider\Scalar
Refinery29\Test\Util\DataProvider\Truthy
如果您想将上述数据提供者与一些任意值混合,请使用
Refinery29\Test\Util\DataProvider\Elements
示例
将所有内容组合在一起,以下是一个使用测试助手的测试示例
namespace Acme\Test; use Acme\Website; use PHPUnit\Framework; use Refinery29\Test\Util\DataProvider; use Refinery29\Test\Util\TestHelper; final class WebsiteTest extends Framework\TestCase { use TestHelper; /** * @dataProvider providerInvalidTitle * * @param mixed $title */ public function testConstructorRejectsInvalidTitle($title) { $this->expectException(\InvalidArgumentException::class); new Website($title); } /** * @return \Generator */ public function providerInvalidTitle() { return $this->provideDataFrom( new DataProvider\InvalidString(), new DataProvider\BlankString(), new DataProvider\Elements([ 'foo', 'bar', ]) ); } public function testConstructorSetsTitle() { $title = $this->getFaker()->sentence(); $website = new Website($title); $this->assertSame($title, $website->title()); } /** * @dataProvider \Refinery29\Test\Util\DataProvider\InvalidUrl::data() * * @param mixed $url */ public function testWithUrlRejectsInvalidUrl($url) { $title = $this->getFaker()->sentence(); $website = new Website($title); $this->expectException(\InvalidArgumentException::class); $website->withUrl($url); } /** * @dataProvider providerUrl * * @param string $url */ public function testWithUrlClonesInstanceAndSetsUrl($url) { $title = $this->getFaker()->sentence(); $website = new Website($title); $mutated = $website->withUrl($url); $this->assertInstanceOf(Website::class, $mutated); $this->assertNotSame($website, $mutated); $this->assertSame($url, $mutated->url()); } /** * @return \Generator */ public function providerUrl() { return $this->provideData([ 'http://www.refinery29.com', 'http://www.refinery29.de', 'http://www.refinery29.uk', ]); } }
贡献
请查看 CONTRIBUTING.md
。
行为准则
请查看 CONDUCT.md
。
许可证
此包使用 MIT 许可证授权。