3

PHPUnitのドキュメントでは、コードカバレッジデータを取得できると書かれています。

PHPUnit_Extensions_SeleniumTestCaseは、Seleniumを介して実行されるテストのコードカバレッジ情報を収集できます。

  1. PHPUnit / Extensions / SeleniumTestCase/phpunit_coverage.phpをWebサーバーのドキュメントルートディレクトリにコピーします。

  2. Webサーバーのphp.ini構成ファイルで、PHPUnit / Extensions / SeleniumTestCase/prepend.phpとPHPUnit/Extensions / SeleniumTestCase/append.phpをそれぞれauto_prepend_fileとauto_append_fileとして構成します。

  3. PHPUnit_Extensions_SeleniumTestCaseを拡張するテストケースクラスでは、protected $ coverageScriptUrl ='http://host/phpunit_coverage.php';を使用します。phpunit_coverage.phpスクリプトのURLを構成します。

カバレッジ情報を出力するためにこれを取得することができませんでした。通常の単体テストでコードカバレッジ情報を取得できます。

で実行されているアプリの場合、http://localhost/ts2_templates/にコピーphpunit_coverage.phpしましたhttp://localhost/phpunit_coverage.php

php.iniに以下を追加しました。

auto_prepend_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/prepend.php"
auto_append_file = "/path/to/pear/share/pear/PHPUnit/Extensions/SeleniumTestCase/append.php"

...そしてそれらがで呼び出されていることを確認しましたdie("yep it's me");

最後に、テストケースに次のものを追加しました。

<?php

class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
    # added line below
    protected $coverageScriptUrl = 'http://localhost/phpunit_coverage.php';

    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://localhost/ts2_templates');
    }

    public function testTitle()
    {
        $this->url('http://localhost/ts2_templates');
        $this->assertContains('test', $this->title());
    }
}

?>

PHPStormによって生成されたコードカバレッジでテストを実行するためのコマンドは次のとおりです。

/Applications/MAMP/bin/php5.3/bin/php -dxdebug.coverage_enable=1 /private/var/folders/pp/0t4y41f95j5313qm_f8b42fw0000gn/T/ide-phpunit.php --coverage-clover /path/to/coverage/ts2_templates$WebTest.coverage --no-configuration WebTest /Users/Ian/php/ts2_templates/tests/WebTest.php

カバレッジXMLファイルの出力は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1341015508">
    <project timestamp="1341015508">
        <metrics files="0" loc="0" ncloc="0" classes="0" methods="0" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="0" coveredstatements="0" elements="0" coveredelements="0"/>
    </project>
</coverage>

テスト自体は合格です。

コードのどこにもexitまたはdieステートメントがないことを確認しました。

何か案は?

4

2 に答える 2

2

また、物事を機能させる上でいくつかの問題がありました。Samuel GoldsteinによるYIIフォーラムの次の投稿は、私を助けてくれました。

prepend.phpとappend.phpをプロジェクトのドキュメントルートに移動することになりました。

また、一時ファイルの場所に違いがあることもわかりました。元々はそれらを保存しようとしていたのですが/tmp/、PHPは黙って失敗していました。そのディレクトリに変更$GLOBALS['PHPUNIT_COVERAGE_DATA_DIRECTORY']myroot/protected/runtime/tmpてchmod777を実行すると、動作を開始しました。

少しイライラするかもしれないことの1つは、Ajaxを介して実行されるコードがカバーされているというフラグが立てられないことです。

これはSeleniumの既知の問題のようです。詳細については、Googleの「githubsebastianbergmann phpunit-seleniumの問題」およびクローズされた問題#22を追跡してください。

于 2012-09-06T09:39:42.643 に答える
1

それは間違いなく機能しています。ドキュメントに従ってカバレッジを測定するsymfonyでセレンテストをセットアップしました。

私が抱えていた最大の問題は、カバレッジ データに含まれるファイルへのパスが間違っていたため、ソースをカバレッジ データに合わせることができなかったことです。これは、サーバーがファイルを保持していたため、別の場所からテストを実行したためです。そのためappend.php、ソース ファイルがある場所へのパスを書き換えるように微調整しました。

于 2012-07-26T08:47:36.623 に答える