petrkotek/phpunit-naughtytestdetector

PHPUnit 的 "坏测试检测器"。识别那些不会清理自己的测试。

v3.0.0 2021-08-22 10:40 UTC

README

Build Status Coverage Status

"坏测试检测器" for PHPUnit。识别那些在执行后留下垃圾数据的测试。

我们很多人都有过这样的经历——你的集成测试在独立运行时工作正常,但在一系列测试运行时却会失败。这可能会非常难以调试,但幸运的是,phpunit-naughtytestdetector 正在这里帮助你。

要求

  • PHPUnit 6.0+
  • 支持的 PHP 版本:7.0 和 7.1

注意:对于更旧的 PHPUnit 或 PHP 5.6,请使用 v0.2.0

安装

NaughtyTestDetector 可通过 Composer 安装,并应作为 require-dev 依赖项添加

composer require --dev petrkotek/phpunit-naughtytestdetector

使用方法

1. 通过将以下内容添加到你的测试套件的 phpunit.xml 文件中,启用 NaughtyTestListener

<phpunit bootstrap="vendor/autoload.php">
    ...
    <listeners>
        <listener class="PetrKotek\NaughtyTestDetector\PHPUnit\Listeners\NaughtyTestListener">
            <arguments>
                <!-- Class name of your own MetricFetcher -->
                <string>MyProject\TestUtils\MyMetricFetcher</string>
                <!-- Optional constructor arguments for the metric fetcher -->
                <array>
                    <element>
                        <string>hello world</string>
                    </element>
                </array>
                <!-- Optionally specify levels on which MetricFetcher should be executed -->
                <!-- Note: values below are the default ones -->
                <array>
                    <element key="executeOnTestLevel">
                        <boolean>false</boolean>
                    </element>
                    <element key="executeOnTestSuiteLevel">
                        <boolean>true</boolean>
                    </element>                
                    <element key="executeOnGlobalLevel">
                        <boolean>false</boolean>
                    </element>
                </array>
            </arguments>
        </listener>
    </listeners>
</phpunit>

2. 实现接口 MetricFetcher,例如:

namespace MyProject\TestUtils\MyMetricFetcher;

use PetrKotek\NaughtyTestDetector\MetricFetcher;

class MyMetricFetcher implements MetricFetcher
{
    private $db;
    
    public function __construct()
    {
        $this->db = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
    }

    /**
     * @return array
     */
    public function fetchMetrics()
    {
        $result = mysqli_query($this->db, 'SELECT COUNT * FROM my_table');
        $row = mysqli_fetch_row($result);
        
        return ['records' => $row[0];
    }
}

提示:您还可以使用内置的指标获取器,例如 PetrKotek\NaughtyTestDetector\MetricFetchers\GlobalsMetricFetcher

3. 运行你的测试套件。

例如:phpunit --configuration integration.xml

NaughtyTestListener 将在每个 TestSuite(即 "测试类")前后获取指标,如果前后有差异,则会打印出类似的消息

MyProject\Integration\MyNamespace\BadTest is naughty!
 - my_table: 0 -> 5 (+5)

这意味着,在测试之前,my_table 中有 0 条记录,在执行所有测试之后,有 5 条记录。

注意:如果你想要暂时禁用坏测试检测器,请使用环境变量 DISABLE_NAUGHTY_TEST_DETECTOR,例如:DISABLE_NAUGHTY_TEST_DETECTOR=1 phpunit --configuration integration.xml