steos/quickcheck

一个生成性测试库

v2.0.2 2022-06-02 20:55 UTC

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 条款)许可协议分发。