petrkotek / phpunit-naughtytestdetector
PHPUnit 的 "坏测试检测器"。识别那些不会清理自己的测试。
v3.0.0
2021-08-22 10:40 UTC
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: ^8.5
- satooshi/php-coveralls: ^1.0
This package is not auto-updated.
Last update: 2024-09-17 15:25:50 UTC
README
"坏测试检测器" 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
。