jonathrg / proposition
轻量级基于属性的PHP测试
v0.9
2017-06-18 17:16 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: ^5.7
This package is not auto-updated.
Last update: 2024-09-29 02:27:04 UTC
README
轻量级基于属性的PHP测试库。灵感来自Python的Hypothesis库。
安装
由于API尚未完全稳定,您必须在composer install中指定dev-master
composer install jonathrg/proposition:dev-master
什么是基于属性的测试?
基于属性的测试基于输入对代码输出的陈述,并对许多不同的可能输入进行验证。基于属性的测试框架会反复运行相同的测试,使用生成的输入。
这与基于示例的测试形成对比,后者需要手动编写输入。类似于Proposition的基于属性的测试库允许您仅用几行代码就使用数千种输入组合(包括所有类型的边缘情况)来测试您的代码。例如,Proposition使用自身进行测试,每行测试代码大约有4000个断言。
文档
示例用法
在examples
文件夹中有一些Proposition生成的值的示例。从命令行运行它们(见那里的readme.md)
以下是一个玩具示例,说明如何使用Proposition检查您对abs($a) == abs($b)
的出色重实现是否真正有效。
use Proposition/Proposition;
function equal_magnitude($a, $b)
{
return ($a = $b) || ($a == -$b);
}
$proposition = new Proposition();
$proposition
->given(Proposition::integers(), Proposition::integers())
->call(function($a, $b) {
if(equal_magnitude($a, $b) != (abs($a) == abs($b))) {
echo "ERROR!! equal_magnitude is wrong when \$a is $a and \$b is $b!\n";
}
});
哎呀!我们收到了很多错误消息。我们会很快发现我们在函数中使用了=
而不是应该使用的==
。
在实践中,您将使用此功能将大量自动生成的值传递到您的函数中,并检查某些属性是否始终成立。例如,您可能想检查函数的输出是否与输入有某种关系,函数是否抛出了异常,等等。
项目目标
- 极轻量级且易于使用
- 您只需要使用
use
一个类。- 未来可能包括用于PHPUnit测试的简单trait。
- 简单的API,当使用良好的变量名时,读起来像英语。
- 使用生成器来产生满足给定约束的随机值。
- 实用主义:已包含常见的用例,如整数、整数范围、字符串、“垃圾”数据等。
- 但我们不需要为每个可能的用例都使用生成器。您可以在
call
的回调中按任何方式转换您的值,并且您可以使用Proposition::stream()
方法以您自己的方式生成值。
- 但我们不需要为每个可能的用例都使用生成器。您可以在
- 除了生成器和回调外,不使用“高级”或“框架化”功能(不应有
Proposition\Interfaces\PropositionableIterators\PropositionableIteratorInterface
)。 - “require”中没有包
- 您只需要使用
- 易于与PHPUnit集成,但主
Proposition
类中不应有任何特定于PHPUnit的功能。 - 兼容PHP v.7.0及以上版本,但也兼容v.5.6。可能不支持更低版本。
状态
大部分核心功能和文档已完成。计划是修复问题#1和问题#3,编写一些PHPUnit测试,使其能够自我测试,然后发布到Packagist。
欢迎贡献者加入!