datto/phpunit-entropy

提供工具以允许

0.1.1 2018-01-04 16:27 UTC

This package is not auto-updated.

Last update: 2024-09-21 00:24:28 UTC


README

Entropy 是一个库,用于在 PHPUnit 中提供随机测试工具,以及用于测试利用 PHP 的随机函数(如 randshuffle)的系统的工具。

使用案例

检测依赖测试

有时单元测试需要更改全局状态,或覆盖改变该状态的功能。虽然这从来不是理想的情况,但这往往会导致意外地依赖其他测试。

启用 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>