datto / phpunit-entropy
提供工具以允许
Requires
- php: >=5.3.0
Requires (Dev)
- phpmd/phpmd: >=2.1.0
- phpunit/phpunit: >=4.8
- squizlabs/php_codesniffer: >=1.5.0
This package is not auto-updated.
Last update: 2024-09-21 00:24:28 UTC
README
Entropy 是一个库,用于在 PHPUnit 中提供随机测试工具,以及用于测试利用 PHP 的随机函数(如 rand
和 shuffle
)的系统的工具。
使用案例
检测依赖测试
有时单元测试需要更改全局状态,或覆盖改变该状态的功能。虽然这从来不是理想的情况,但这往往会导致意外地依赖其他测试。
启用 Entropy 的测试顺序随机化功能可以随机化测试的顺序,有助于突出这些依赖关系。
Entropy 的测试顺序随机化还避免了使用 PHPUnit 的 @depends
功能来更改测试的顺序;未来的工作将努力确保在适当的情况下,这些测试仍然可以进行随机化。
随机化测试
有时你可能发现自己处于一种情况,其中函数的输入范围非常大,因此获取这些输入的横截面是更有效地使用你的资源。但是,如果这个横截面中存在可能导致测试失败的漏洞怎么办?
解决这个问题的方法之一是使用随机输入,其中输入以某种方式生成,以便获得范围的一个随机横截面。换句话说,使用 rand
或其他类似的非确定性方法。
这种方法的扩展是属性测试,它是指将随机输入应用到您的应用程序或函数中,并观察输出是否符合某些规则或相对于输入具有某些属性,而不是精确测试与已知结果集的相等性。
通过管理测试的随机种子,Entropy 允许使用这些方法,并且可以使其可重复,无论是通过接受一个固定的种子,还是从上一次失败的运行中恢复它,直到测试套件通过。
包含到您的项目中
您可以使用 Composer 将此库添加到您的项目中
$ composer require datto/phpunit-entropy
运行
配置完成后,您可以像平常一样运行测试套件;监听器将自行处理。在测试出错或失败时,所使用的种子将存储在一个临时文件中,以便在下一次运行时重新使用,而不是生成一个新的种子。
定义种子
随机数生成器的种子可以从最多四个位置提供,以下按优先顺序列出。
环境变量
如果设置,则将使用 SEED
环境变量来覆盖任何其他设置。它可以通过 export
设置,但建议仅为此次运行设置
SEED=123456 phpunit -c phpunit.xml tests
配置
种子可以通过配置固定;请参阅下面的配置部分。
上一次运行
如果测试运行失败,则使用的种子将存储在一个临时文件中。然后,在随后的测试中加载它,并持续到套件再次成功为止。
rand()
如果没有通过上述方法设置种子,则最终方法是使用 PHP 的 rand
函数。
配置
Entropy 测试监听器
通过 composer 安装后,配置测试监听器只需修改您的 PHPUnit 配置文件(通常是 phpunit.xml
)
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="bootstrap.php" > <listeners> <listener class="Datto\PHPUnit\Entropy\Listener"> <arguments> <array> <element key="seeding"> <array> <element key="enabled"> <boolean>true</boolean> </element> <element key="seed"> <integer>1234567</integer> </element> <element key="file"> <string>/tmp/phpentropy-seed</string> </element> </array> </element> <element key="shuffle"> <boolean>true</boolean> </element> </array> </arguments> </listener> </listeners> </phpunit>
参数
播种
启用 - 布尔值
如果设置为true,随机数生成器将由监听器初始化。
seed - 整数
如果您通过此参数设置种子,则仅使用此值初始化随机数生成器。请参阅以下关于种子优先级的部分。
file - 字符串
如果设置,此文件将用于存储上一次失败的随机种子;默认为[临时目录位置]/phpunit-entropy-seed
。
shuffle - 布尔值
如果设置为true,单元测试的执行顺序将被随机化(除了使用@depends
的测试套件)。这在确定和识别测试之间的依赖关系时很有用。
未来工作
- 跟踪后续的测试运行
- 检测运行之间的变化
- 在测试被随机化时提供指导性输出
开发者联系方式
Christopher Hoult <choult@datto.com>