steos / php-quickcheck
Requires
- php-64bit: >=7.3.0
- symfony/console: ^5.3 || ^6.0
Requires (Dev)
- phpunit/phpunit: ^9.3
Suggests
- ext-gmp: *
This package is auto-updated.
Last update: 2022-06-02 20:58:37 UTC
README
PHPQuickCheck 是一个基于 clojure.test.check 的 PHP 生成测试库。
不要编写测试。生成它们。 - 约翰·休斯
什么?
生成测试,也称为属性测试,是关于用所有可能输入应保持正确的属性来描述您系统的行为。
快速入门
安装 PHPQuickCheck
composer require steos/quickcheck --dev
创建一个属性测试 test/stringsAreNeverNumeric.php
<?php use QuickCheck\Generator as Gen; use QuickCheck\Test; Test::forAll( [Gen::asciiStrings()], function($str) { return !is_numeric($str); } );
并对它运行 quickcheck
$> vendor/bin/quickcheck test/stringsAreNeverNumeric.php -t 1000
PHPQuickCheck 2.0.2. Don't write tests. Generate them.
834/1000 [=========================================>--------] 83%
Time: 454 ms, Memory: 4.00 MB, Seed: 1578763578270, maxSize: 200
Failing inputs: array (
0 => '9E70',
)
Shrinking inputs...done. (0.00 s)
Smallest failing inputs: array (
0 => '0',
)
QED. (834 tests)
文档
API
其他资源
xdebug
PHPQuickCheck 使用了大量的函数式编程技术,这导致了许多嵌套函数。在 xdebug 默认设置下,它可能会迅速导致此错误
Error: Maximum function nesting level of '256' reached, aborting!
这是由于无限递归保护设置 xdebug.max_nesting_level
导致的。最好是禁用它或将它设置为一个高值。phpunit 配置将其设置为 9999
。
性能
-
禁用 xdebug 以加快测试运行速度。它对运行时性能有巨大影响。
-
使用 GMP 扩展。如果可用,RNG 将使用 gmp 函数。否则,它将回退到非常慢的位操作。
项目状态
PHPQuickCheck 有一点实验性。clojure.test.check 的核心功能(v0.5.9,2014年8月)已实现。自初始移植以来,clojure.test.check 已经进行了一些改进,但尚未实现。
贡献
欢迎所有贡献。
请随意分叉并发送拉取请求。如果您打算进行重大更改,请与我们联系,以便我们协调我们的努力。
开发环境搭建
仓库包含一个 Dockerfile,用于快速设置开发环境。它基于 php:7.3.18-cli
镜像,并添加了 xdebug、gmp 和 composer。
$ docker build -t php-quickcheck-dev dev-env
$ docker run --rm -it --mount src=$(pwd),target=/quickcheck,type=bind php-quickcheck-dev bash
# cd /quickcheck
# composer install
# vendor/bin/phpunit
# bin/quickcheck examples
该镜像还包含一个小脚本 toggle-ext
,用于切换 php 扩展的开关
root@c871096e2c92:/quickcheck# toggle-ext xdebug
xdebug is now disabled
root@c871096e2c92:/quickcheck#
致谢
所有荣誉都归 clojure.test.check 所有,本项目主要是移植。
需求
需要PHP 7.3.x版本,支持64位整数。推荐使用gmp扩展,但不是必需的。
许可证
版权所有 © 2022,Stefan Oestreicher 及贡献者。
在BSD(3条款)许可证下分发。