1

我正在尝试使用 phpdbg 在没有测试框架的情况下测量测试覆盖率

我的测试测试脚本如下所示:

$ cat hello.php
<?php

if (0) {
  echo "bye\n";
} else {
  echo "hello\n";
}

所以它只是像这样打印你好:

$ php hello.php 
hello

顺便说一下,这是我的 php 版本

$ php --version
PHP 7.4.3 (cli) (built: Aug 13 2021 05:39:12) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

我试图猜测如何使用 来衡量这个脚本的测试覆盖率,phpdbg这就是我想出的

$ mkdir coverage
$ phpdbg -qrr hello.php --coverage-html coverage
hello
$ find coverage
coverage/

目录为空

我曾希望在那里找到一份报道报告

有人知道我必须做什么不同吗?

4

1 回答 1

1

我对PHP中代码覆盖的工作方式的理解是调试器(phpdbg或该特定线路被击中的次数等)。事实上,争论不是 for ,而是 for 。这篇文章展示了一个完整命令行的例子,它的最小版本是:Xdebugphpunit--coverage-htmlphpdbgphpunit

phpdbg \
  -qrr vendor/phpunit/phpunit/phpunit \
  -c phpunit.xml \
  --coverage-html coverage

但显然这涉及使用phpunit和运行测试,这不适合您的用例。

我开始好奇这一切是如何工作的,并把这个玩具覆盖工具放在一起,它适用于您提供的非常简单的脚本。输出类似于:

 | <?php
 | 
1| if (0) {
0|     echo "bye\n";
 | } else {
1|     echo "hello\n";
 | }

但是,如果您看一下,Profiler::render_coverage您会发现将其调整为您想要的任何输出格式都不会太棘手。

于 2021-11-04T05:32:12.650 回答