今回は、リファクタリングとUNITテストとデバッグがちゃんとできるのか?・・です。
リファクタリングをやってみる
とりあえず、前回のソースコードで以下の変更をやってみます。
- プロジェクト名の変更
- ソースファイル名の変更
- クラス名の変更
- メソッド名の変更
プロジェクト名/ソースファイル名の変更
同じ手順なので、まとめて書きます。
変更したいものを選んで、リファクタリング>名前変更を選ぶと、こんなダイアログが表示されます。
で変更したい名称を入力して、プレビューボタンを押すと、参照の更新の候補が表示されるので、確認してOKを押す。
それできれいに変更されます。
問題なさげです。
クラス名の変更・メソッド名の変更
ソースコード内で選択して、リファクタリング>名前の変更をするのは同じです。
ただ、残念ながら、クラスとメソッドについては、他のソースの参照名までがきれいに変わりませんでした。
うーん。
何か、やり方があるんですかね。
まあ、とりあえず、JAVA+eclipseでやりがちな「メソッド名をとりあえず決めといて、あとでリファクタリングで修正する」アプローチは、注意しないとダメですね。
できると思いこんでると、後で泣くかも・・です。
今度は単体テスト
クラスファイルを右クリックして、新規を選択すると「Testケース」を生成する選択肢がでてきます。
楽勝じゃないか・・と思って、「PHPUnit Test Case」を選択してみると、対象となるクラスを選択して、テストケースファイルの名前とクラスを自動生成するダイアログが表示されます。
これで、こんなファイルができます。
<?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をインストールします。
eclipseのPHPが5.6なので、PHPUNITも5になります。
以下のフォルダからphpunit.pharをダウンロードします。
Getting Started with Version 5 of PHPUnit – The PHP Testing Framework
ここから、phpunit.pharをダウンロードして、インストールフォルダのxampp\phpの下にコピーします。
プロジェクトのプロパティを開き、ソースパス>インクルードパスのライブラリで、外部PHARの追加で、さっきコピーしたphpunit.pharを選択して追加します。
これで適用すれば、エラーは消えます。
じゃあ・・PHPUNITテスト実行してみよう・・あれ・・エラーだ。
どうも、PHPUNITの場所が見えていないっぽい。
設定をひとつ忘れてました。
プロジェクトのプロパティの実行/デバッグ構成です。
ここで、PHPUNITの場所を設定します。
ちょっとわかりづらいですが、上記の「click here」の部分をクリックします。
そうすると、以下のようなダイアログが開くので、そこの「PHPUnit Phar」の部分に、上記でコピーした「phpunit.phar」のパスを指定して適用します。
これで、実行できるはずなので、やってみます。
おお・・。
OKじゃないか。
PHPUNITの構文やテストの書き方などは、以下のサイトに詳しく書いてあるので、ぼちぼち勉強しながらやるとして、まあ、ちゃんと使えますね。
あと、デバッグができりゃあ・・結構使えそう
デバッガが有効になっているかどうか、まず、設定を確認します。
PHP.iniを見ると。
パスの設定も自動的にはされてます。
設定>デバッガを見ると。
うん、設定されていますね。
これでできるはずです。
やってみます。
でも、些細なことですが、つまづきポイントは2つありました。
まず、最初のつまづきポイント。
パースペクティブを、先に「デバッグ」に変更しておく必要があります。
デバッグの実行をすると、デバッグパースペクティブには切り替わるのですが、PHPパースペクティブのままだと、メニューに「行ブレークポイントの切り替え」などの、デバッグに必要な項目がでてないので、ブレークポイントの設定をどうしたらよいのか・・、ちょっと迷います。
ふたつめ。
デバッグ>PHP CLIアプリケーション で実行することです。
まあ、自分だけかもしれませんが、「デバッグ>サーバーでデバッグ」をつい選択してしまうと、結構、悩むことになります。
うまくいきませんから。
それでは。
適当にブレークポイントを設定して、やってみます。
デフォルトだと、まず最初の行でストップします。
設定で「最初の行でブレーク」にチェックがついてますので。
あとは、実行メニューにある「再開F8」とか「ステップインF5」とか「ステップオーバーF7」とかブレークポイントを使って、ウォッチウインドウで変数の状態を見る。
うん、十分ですね。
リファクタリングはちょっと弱い気がしたけど、他は問題ないです。
いいじゃないですか(笑)