steos/php-quickcheck

该软件包已被废弃,不再维护。作者建议使用steos/quickcheck软件包。

生成测试库

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

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