公式にサポートされている方法でも動作しませんでしたが、ここではコードを調べて一緒にハックすることができました。これはマスターコードではなく、SimpleTestのv1.1.7で動作します。この記事を書いている時点では、v1.1.7は最新のリリースであり、古いバージョンであっても新しいバージョンのPHP 7で動作します。
まず、Xdebugがインストールされ、設定され、動作していることを確認する必要があります。私のシステムには、php.iniファイルのCLIとApacheバージョンの両方があります。これらのファイルは、Apache経由でPHPを使用しようとしているのか、端末から直接使用しているのかによって適切に設定する必要があります。 Xdebugに代わるものがありますが、ほとんどの人はXdebugです。
次に、コードからPHP_CodeCoverageライブラリにアクセスできるようにする必要があります。プロジェクトにcomposerパッケージとして追加することをお勧めします。
これで、コードカバレッジを取得してレポートを生成するために、そのライブラリを手動で使用するだけで済みます。どのように正確に行うのかは、テストの実行方法によって異なります。個人的に、私は端末でテストを実行し、スクリプトを起動する前にPHPが実行するブートストラップファイルを持っています。あなたが作成する必要がありますあなたのブートストラップファイル内のどこかに
require_once __DIR__.'/vendor/simpletest/simpletest/autorun.php';
:それは自動的にそのように含まれ得る任意のテストクラスにテストを実行しますので、ブートストラップファイルの終わりに、私は、SimpleTestの自動実行ファイルを含めますフィルタを作成し、報告するディレクトリとファイルをホワイトリストに登録し、カバレッジオブジェクトを作成してコンストラクタにフィルタを渡し、カバレッジを開始し、SimpleTestがテストを実行する方法を変更するシャットダウン関数を作成して登録しますまた、カバレッジを停止し、カバレッジレポートを生成する。あなたのブートストラップファイルは次のようなものになります。
<?php
require __DIR__.'/vendor/autoload.php';
$filter = new \SebastianBergmann\CodeCoverage\Filter();
$filter->addDirectoryToWhitelist(__DIR__."/src/");
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(null, $filter);
$coverage->start('<name of test>');
function shutdownWithCoverage($coverage)
{
$autorun = function_exists('\run_local_tests'); // provided by simpletest
if ($autorun) {
$result = \run_local_tests(); // this actually runs the tests
}
$coverage->stop();
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$writer->process($coverage, __DIR__.'/tmp/code-coverage-report');
if ($autorun) {
// prevent tests from running twice:
exit($result ? 0 : 1);
}
}
register_shutdown_function('\shutdownWithCoverage', $coverage);
require_once __DIR__.'/vendor/simpletest/simpletest/autorun.php';