steos / 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: 2024-08-30 01:20:24 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 函数。否则,它将回退到在 PHP 用户空间中非常缓慢的位操作。
项目状态
PHPQuickCheck 是一种实验性项目。clojure.test.check 的核心功能(v0.5.9,2014 年 8 月)已经实现。自最初移植以来,clojure.test.check 已经有了许多改进,但尚未实现。
贡献
欢迎所有贡献。
请随意分支并发送 pull request。如果您打算进行重大更改,请与我们联系,以便我们可以协调我们的工作。
开发环境设置
存储库包含一个 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 条款)许可协议分发。