"BOKU"のITな日常

還暦越えの文系システムエンジニアの”BOKU”は新しいことが大好きです。

PHP+eclipse:リファクタリングとデバッグと単体(UNIT)テストをやってみる。

素のPHPeclipseでやってみます。

今回は、リファクタリングとUNITテストとデバッグがちゃんとできるのか?・・です。

f:id:arakan_no_boku:20180926203227j:plain

 

リファクタリングをやってみる

 

とりあえず、前回のソースコードで以下の変更をやってみます。

  • プロジェクト名の変更
  • ソースファイル名の変更
  • クラス名の変更
  • メソッド名の変更
プロジェクト名/ソースファイル名の変更

同じ手順なので、まとめて書きます。

変更したいものを選んで、リファクタリング>名前変更を選ぶと、こんなダイアログが表示されます。

f:id:arakan_no_boku:20180831171737j:plain

で変更したい名称を入力して、プレビューボタンを押すと、参照の更新の候補が表示されるので、確認してOKを押す。

それできれいに変更されます。

問題なさげです。

 

クラス名の変更・メソッド名の変更

ソースコード内で選択して、リファクタリング>名前の変更をするのは同じです。

f:id:arakan_no_boku:20180831195917j:plain

ただ、残念ながら、クラスとメソッドについては、他のソースの参照名までがきれいに変わりませんでした。 

うーん。

何か、やり方があるんですかね。

まあ、とりあえず、JAVAeclipseでやりがちな「メソッド名をとりあえず決めといて、あとでリファクタリングで修正する」アプローチは、注意しないとダメですね。

できると思いこんでると、後で泣くかも・・です。

 

今度は単体テスト

 

クラスファイルを右クリックして、新規を選択すると「Testケース」を生成する選択肢がでてきます。

f:id:arakan_no_boku:20180831220006j:plain

楽勝じゃないか・・と思って、「PHPUnit Test  Case」を選択してみると、対象となるクラスを選択して、テストケースファイルの名前とクラスを自動生成するダイアログが表示されます。

f:id:arakan_no_boku:20180831220143j:plain

これで、こんなファイルができます。

    <?php
require_once 'controller/PracCtrl.php';

/**
 * PracCtrl test case.
 */
class PracCtrlTest extends PHPUnit_Framework_TestCase
{

    /**
     *
     * @var PracCtrl
     */
    private $pracCtrl;

    /**
     * Prepares the environment before running a test.
     */
    protected function setUp()
    {
        parent::setUp();

        // TODO Auto-generated PracCtrlTest::setUp()

        $this->pracCtrl = new PracCtrl(/* parameters */);
    }

    /**
     * Cleans up the environment after running a test.
     */
    protected function tearDown()
    {
        // TODO Auto-generated PracCtrlTest::tearDown()
        $this->pracCtrl = null;

        parent::tearDown();
    }

    /**
     * Constructs the test case.
     */
    public function __construct()
    {
        // TODO Auto-generated constructor
    }

    /**
     * Tests PracCtrl->getTableDataArray()
     */
    public function testGetTableDataArray()
    {
        // TODO Auto-generated PracCtrlTest->testGetTableDataArray()
        $this->markTestIncomplete("getTableDataArray test not implemented");

        $this->pracCtrl->getTableDataArray(/* parameters */);
    }
}

 

テストクラスの自動生成はいい感じです。

でも、ソースコードがエラーになります。

どうも、「PHPUnit_Framework_TestCaseを型に解決できません」というエラーがでているみたいです。

デフォルトの状態では、PHPUNIT自体がはいみたいです。

ということで。 

PHPUNITをインストールします。

eclipsePHPが5.6なので、PHPUNITも5になります。

以下のフォルダからphpunit.pharをダウンロードします。

Getting Started with Version 5 of PHPUnit – The PHP Testing Framework

f:id:arakan_no_boku:20180831233632j:plain

ここから、phpunit.pharをダウンロードして、インストールフォルダのxampp\phpの下にコピーします。

プロジェクトのプロパティを開き、ソースパス>インクルードパスのライブラリで、外部PHARの追加で、さっきコピーしたphpunit.pharを選択して追加します。

f:id:arakan_no_boku:20180831234705j:plain

これで適用すれば、エラーは消えます。

じゃあ・・PHPUNITテスト実行してみよう・・あれ・・エラーだ。

どうも、PHPUNITの場所が見えていないっぽい。

設定をひとつ忘れてました。

プロジェクトのプロパティの実行/デバッグ構成です。

ここで、PHPUNITの場所を設定します。

f:id:arakan_no_boku:20180901100411j:plain

ちょっとわかりづらいですが、上記の「click here」の部分をクリックします。

そうすると、以下のようなダイアログが開くので、そこの「PHPUnit Phar」の部分に、上記でコピーした「phpunit.phar」のパスを指定して適用します。

f:id:arakan_no_boku:20180901100500j:plain

これで、実行できるはずなので、やってみます。 

f:id:arakan_no_boku:20180901101215j:plain

おお・・。

OKじゃないか。

PHPUNITの構文やテストの書き方などは、以下のサイトに詳しく書いてあるので、ぼちぼち勉強しながらやるとして、まあ、ちゃんと使えますね。

f:id:arakan_no_boku:20180901101622j:plain

 

あと、デバッグができりゃあ・・結構使えそう

 

デバッガが有効になっているかどうか、まず、設定を確認します。

PHP.iniを見ると。

f:id:arakan_no_boku:20180901121806j:plain

パスの設定も自動的にはされてます。

設定>デバッガを見ると。

f:id:arakan_no_boku:20180901121903j:plain

うん、設定されていますね。

これでできるはずです。

やってみます。

でも、些細なことですが、つまづきポイントは2つありました。

まず、最初のつまづきポイント。

パースペクティブを、先に「デバッグ」に変更しておく必要があります。

デバッグの実行をすると、デバッグパースペクティブには切り替わるのですが、PHPパースペクティブのままだと、メニューに「行ブレークポイントの切り替え」などの、デバッグに必要な項目がでてないので、ブレークポイントの設定をどうしたらよいのか・・、ちょっと迷います。

ふたつめ。

デバッグPHP CLIアプリケーション で実行することです。

まあ、自分だけかもしれませんが、「デバッグ>サーバーでデバッグ」をつい選択してしまうと、結構、悩むことになります。

うまくいきませんから。

それでは。

適当にブレークポイントを設定して、やってみます。

f:id:arakan_no_boku:20180901122559j:plain

デフォルトだと、まず最初の行でストップします。

設定で「最初の行でブレーク」にチェックがついてますので。

f:id:arakan_no_boku:20180901123155j:plain

あとは、実行メニューにある「再開F8」とか「ステップインF5」とか「ステップオーバーF7」とかブレークポイントを使って、ウォッチウインドウで変数の状態を見る。

うん、十分ですね。

PHPeclipse

リファクタリングはちょっと弱い気がしたけど、他は問題ないです。

いいじゃないですか(笑)