somemo's diary

プログラマ、雑記、プログラミング関係はLinkから、数式はこっちでまとめていることが多い

【Netbeans】PHPUnit・Xdebugの設定【php】

PHPUnitXdebugの設定メモです。

といっても、xamppインストールして、前に書いた記事と同様です・・・ので、PHPUnitの実行とデバッグの実行方法をメモしておきます。

Netbeansphp設定

  • ツールタブのオプションを選択する
  • 一般タブを選択し、PHP5インタプリタ(php.exe)を指定する
  • 単体テストタブを選択し、PHPUnitスクリプト(phpunit.bat)を指定する(例 C:\xampp\php\phpunit.bat)
  • ファイルから新規プロジェクト作成を選択し、作成する。または、サンプルのAir Alliance(apacheの設定でアクセスできるようにしておくこと)を選択する。
  • 作成したプロジェクトを右クリックし、構成を設定>カスタマイズを選択する。
    • PHPインクルードパスを選択し、PHPUnitのフォルダを追加する。(例 C:\xampp\php\PEAR\PHPUnit)
    • 実行構成を選択し、プロジェクトURLを確認しておく。

PHPUnitによるテストコードの作成

Netbeansには、ソースコードからテストコードの雛形を生成する機能があります。作成手順を下記に示します。

  • クラスを作成し、アクセス権3種メソッド(private・protected・public)を追加する。
  • 作成したクラスファイルを開いたまま、ツールタブのPHPUnitテストを作成するを選択する。
  • ソースファイルフォルダとは別のディレクトリを作成し、それをテストファイルフォルダとする。
  • これでテストコードが作成されます。

生成されるコードの一部を下記に示します。

<?php

require_once dirname(__FILE__) . '/../../web/classes/flight.php';

/**
 * Test class for Flight.
 * Generated by PHPUnit on 2011-10-29 at 17:57:23.
 */
class FlightTest extends PHPUnit_Framework_TestCase {

    /**
     * @var Flight
     */
    protected $object;

    /**
     * Sets up the fixture, for example, opens a network connection.
     * This method is called before a test is executed.
     */
    protected function setUp() {
        $this->object = new Flight;
    }

    /**
     * Tears down the fixture, for example, closes a network connection.
     * This method is called after a test is executed.
     */
    protected function tearDown() {
        
    }

    /**
     * @todo Implement testSet_FID().
     */
    public function testSet_FID() {
        // Remove the following lines when you implement this test.
        $this->markTestIncomplete(
                'This test has not been implemented yet.'
        );
    }
}

?>

publicメソッドのみテストメソッドが作成され、データ用意・完了時処理のためにメソッドが作成されています。

PHPUnitの実行

ソースコードを開き、実行タブからファイルをテストを選択(Ctrl + F6)。または、テストコードを開き、実行タブからファイルを実行を選択します(Shift + F6)

すると、テスト結果のウィンドウが開かれ、テスト結果が表示されます。今回の状態では、有効なテストケースが見つかりません、というメッセージと共にグリーンバー(成功)が表示されます。

テストケースを追加します。

public function testgetStringTest() {
    $this->assertEquals('test', $this->object->getStringTest(), 'actual is not test');
}

テストを実行します。実行すると、実行されたテストはありません。と表示されます。

完全な出力は出力ウィンドウにあります。と表示されるので、ウィンドウタブから出力>出力を選択します。出力ウィンドウが表示され、以下のようにエラーメッセージが表示されます。

Fatal error: Call to undefined method Flight::getStringTest() in C:\テストファイル.php on line 113

トレース結果など詳しく載っています。それよりも、視覚的にテストコードにエラーを表示して欲しいです・・・。

該当の行にカーソルをあてると、電球のマークが行番号に表示されます。マークをクリックするとEclipseのようにヒントが出ます。

今回は、「メソッド" getStringTest()" をクラス "クラス名" (ファイル名)に作成」と表示されました。これをクリックすると、実際に作成されます。すばらしい!

作成された状態でテストを実行するとレッドバー(失敗)が表示されます。テストをパスするように、testという文字列を返すようにします。グリーンバーが表示され、テストに成功しました。

デバッグの実行

こちらはあまりよく分かっていません・・・

  • テンプレート用phpファイルを作成し、適当なphpコードを書いておく。
  • このファイルにアクセスできるリンクを作成しておく。
  • 作成したファイルの行番号をクリックし、ブレークポイントをつける。
  • デバッグタブからファイルをデバッグを選択し、デバッグを開始する
    • ステップオーバー(i行進む F8)
    • ステップイン(i行進みつつ、メソッドの中まで入る F7)
    • 続行(次のブレークポイントまで進む F5)
    • ステップアウト(次のブレークポイントまで進むが、ステップインしていたときは抜ける Ctrl + F7)
    • ウィンドウタブ>デバッグ>変数で、変数を監視するウィンドウが表示される
    • デバッグが1通り終わると、画面が表示される。作成したリンクを押下すると再びデバッグされる。

これでNetbeansでもある程度開発できそうです。