// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= PHPUnitとSeleniumを使用したテスト
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: PHPUnitとSeleniumを使用したテスト - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, PHPUnitとSeleniumを使用したテスト

PHP向けのNetBeans IDEは、link:http://www.phpunit.de[+PHPUnit+]自動化テストをサポートしています。PHPUnitによって、NetBeans IDEでは、IDEがPythonに提供するコード・カバレージと同じように、PHPのコード・カバレージが提供されます。テストの出力は、IDEのJUnitおよびPythonのテスト・ランナーが使用するのと同じ、機能が豊富な出力ウィンドウに表示されます。

NetBeans IDEでは、PHPUnitに加えて、Seleniumの移植可能なテスト・フレームワークもサポートされています。Seleniumプラグインは、更新センターから入手できます。このプラグインをインストールすると、SeleniumサーバーがIDEの登録済サーバーに追加され、Seleniumのテスト・オプションがPHPのメニューに追加されます。


*このチュートリアルに従うには、次のソフトウェアとリソースが必要です。*

|===
|ソフトウェアまたはリソース |必須バージョン 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |PHPダウンロード・バンドル 

|PEARを含むPHPエンジン |バージョン5。 

|Webサーバー |Apache HTTP Server 2.2 (推奨)
 

|link:http://www.phpunit.de[+PHPUnit+] |バージョン3.4.0以上 

|link:http://www.phpunit.de/manual/current/en/skeleton-generator.html[+PHPUnitのスケルトン・ジェネレータ+] |PHPUnitと同じバージョン 
|===


[[installing-phpunit]]
== PHPUnitのインストール

PHPUnitはlink:http://www.phpunit.de/manual/current/en/installation.html[+PHPUnitのドキュメント+]に従って、PHPUnitのスケルトン・ジェネレータはlink:http://www.phpunit.de/manual/current/en/skeleton-generator.html[+スケルトン・ジェネレータのドキュメント+]に従って、PEARを使用してインストールします。PHPUnitバージョン3.4.0以上をインストールします。特別な設定は不要です。PHPUnitがインストールされたら、NetBeansで認識されます。PHPエンジンとともにPEARがインストールされている必要があります。また、PHPUnitのドキュメントには、PHPUnitが通常はローカルのPEARディレクトリにインストールされると記載されています。パスは ``/usr/lib/php/PHPUnit`` と記載されていますが、XAMPP for Windowsでは ``XAMPP_HOME\php\PEAR\PHPUnit`` になります。

NetBeans IDEでPHPUnitのインストールが認識されていることを確認するには、「ツール」>「オプション」(Macの場合は「NetBeans」>「プリファレンス」)を開き、PHPウィンドウを確認します。「単体テスト」タブを開きます。PHPUnitおよびスケルトン・ジェネレータのスクリプトのパスが表示されます。スクリプトが表示されない場合は、空のフィールドの横にある「検索」をクリックします。IDEでは、ローカル・システムでスクリプトを検索します。または、「参照」をクリックして、スクリプトを参照します。

image::images/unittesting-options.png[]


[[create-test]]
== PHPUnitテストの作成と実行

NetBeans IDEでは、ファイル内のすべてのPHPクラスに対するPHPUnitテストを作成し、実行できます。テスト・ジェネレータが正常に動作するように、PHPファイルは、ファイル内の最初のクラスと同じ名前にします。

*クラスのPHPUnitテストを作成して実行するには:*

1. CalculatorというPHPプロジェクトを作成します。このプロジェクトに ``calculator.php`` というファイルを作成します。このファイルに、link:http://www.phpunit.de/manual/current/en/skeleton-generator.html[+PHPUnitのドキュメントのスケルトン・ジェネレータの章+]にあるCalculatorクラスを入力するか、または貼り付けます。

[source,php]
----

<?php
class Calculator
{
    public function add($a, $b)
    {
        return $a + $b;
    }
}
?>
----


. link:http://sebastian-bergmann.de/archives/628-Improved-Skeleton-Generator-in-PHPUnit-3.html[+@assert注釈+]と、入力と出力の例を使用したコメント・ブロックを追加します。この例には間違った表明が1つ含まれています。

[source,php]
----

<?php
class Calculator
{
    /**
     * @assert (0, 0) == 0
     * @assert (0, 1) == 1
     * @assert (1, 0) == 1
     * @assert (1, 1) == 2
     * @assert (1, 2) == 4
     */
    public function add($a, $b)
    {
        return $a + $b;
    }
}
?>
----

NOTE: 注釈のコード補完を使用して、`@assert`注釈を追加できます。[Tab]キーを使用してパラメータ間を移動するか、またはパラメータ値を入力して[Enter]を押します。

image::images/assert-cc.png[]

image::images/assert-cc-complete.png[]



. 「プロジェクト」ウィンドウで「Calculator.php」ノードを右クリックし、「ツール」>「PHPUnitテストを作成」を選択します。「ソース・ファイル」ノードのコンテキスト・メニューで、プロジェクト内のすべてのファイルのテストを作成できます。

image::images/create-tests.png[]



. テストを初めて作成するときは、テスト・ファイルを保存するディレクトリを指定するダイアログが開きます。この例では、参照機能を使用して ``tests`` ディレクトリを作成しています。

image::images/test-directory.png[]

NOTE:  1つのプロジェクトに複数のテストを手動で記述できます。複数のテストを記述する場合は、テスト・ファイルのディレクトリのサブディレクトリ(たとえば、"important"、"quick")に、それらのテストをソートできます。次に、サブフォルダを右クリックし、「テストの実行」を選択して、サブフォルダ内のテストを実行できます。

image::images/test-in-folder.png[]



. IDEによって、CalculatorTest.phpというファイルに、スケルトン・テスト・クラスが生成されます(このファイルは、「プロジェクト」ウィンドウに表示され、エディタで開きます)。

image::images/test-class-in-project.png[]

 ``@assert`` 注釈ごとにテストが作成されます。


[source,php]
----

    /**
     * Generated from @assert (1, 1) == 2.
     */
    public function testAdd4()
    {
        $this->assertEquals(
          2,
          $this->object->add(1, 1)
        );
    }
----


. 1つのファイルまたはプロジェクト全体をテストできます。プロジェクトをテストするには、プロジェクトの親ノードを右クリックして「テスト」を選択するか、または[Alt]-[F6]を押します。Calculator.phpファイルをテストするには、ファイルのノードを右クリックして「テスト」を選択するか、または[Ctrl]-[F6]/[⌘]-[F6]を押します。この例では、1つのファイルに1つのクラスのみがあるため、結果は同じです。IDEによってテストが実行され、「テスト結果」ウィンドウに結果が表示されます。

image::images/test-results-narrow.png[]

より詳細なテキスト・バージョンの結果が「出力」ウィンドウに表示されます。

image::images/test-result-output.png[]


== テスト・グループの使用

テスト・スイートを実行するとき、実行するテストのグループを選択できます。たとえば、一部のテストは本番環境でのみ実行し、他のテストは本番環境と開発環境の両方で実行する場合があります。前者のテストを ``production`` グループに配置し、後者のテストを ``production`` グループと ``development`` グループの両方に配置します。テスト・スイートを開発環境で実行する場合、 ``development`` テスト・グループのみを選択して実行します。

PHPプロジェクト内の任意のファイルについてテスト・グループを使用するには、そのプロジェクトでテスト・グループを有効にする必要があります。

テスト・グループの一部としてテストをマークするには、テスト・メソッドに ``@group [group name]`` の注釈を付けます。

*テスト・グループを作成および実行するには、次を実行します。*

1. 「プロジェクト」ウィンドウで「Calculator」ノードを右クリックし、「プロパティ」を選択します。「プロジェクト・プロパティ」が開きます。
2. 「プロジェクト・プロパティ」で「PHPUnit」カテゴリを選択します。「テストの実行前にテスト・グループの入力を求める」を選択します。「OK」をクリックします。

image::images/test-group-properties.png[]



. エディタで ``CalculatorTest.php`` を開きます。


. メソッド ``testAdd`` 、 ``testAdd3`` 、および ``testAdd5`` について、注釈 ``@group production`` を追加します。

image::images/production-group-annotation.png[]



. メソッド ``testAdd2`` および ``testAdd4`` について、注釈 ``@group production`` および ``@group development`` を追加します。image:images/production-development-group-code.png[]


.  ``Calculator.php`` ノードを右クリックし、「テスト」を選択します。ダイアログが開き、実行するテスト・グループを指定するように求められます。「development」を選択して「OK」をクリックします。IDEは、 ``@group development`` という注釈が付いたテストのみを実行します。

image::images/select-test-group.png[]

NetBeans IDEのPHPUnitテスト・グループの詳細は、PHP向けのNetBeans IDEブログ投稿のlink:http://blogs.oracle.com/netbeansphp/entry/using_phpunit_test_groups[+PHPUnitテスト・グループの使用+]を参照してください。


[[result-windows]]
== テスト結果とIDE出力

PHPUnitのテスト結果は、IDEの「テスト結果」と「出力」の2つのウィンドウに表示されます。「テスト結果」ウィンドウには、グラフィック・ペインと簡単なテキスト・ペインがあります。「出力」ウィンドウには、より詳細なテキスト・バージョンの出力が表示されます。この項では、「テスト結果」ウィンドウと「出力」ウィンドウについて詳しく説明します。

「テスト結果」ウィンドウでは、次の場所で、失敗したテストに関する情報を確認できます。

* UIペイン内で、失敗したテストのツリー・エントリに添付されているメッセージ
* 右側のペイン内のテキスト(失敗したテスト・コード行へのリンクを含む)
* UIペイン内で、失敗したテストの上にカーソルを置くと表示されるツールチップのテキスト

image::images/test-results-tooltip.png[]

「テスト結果」ウィンドウの左側には次のボタンがあります。

* テストを再実行image:images/rerun-button.png[]
* 失敗したテストの表示image:images/show-failed.png[]
* 成功したテストの表示image:images/show-passed.png[]
* 成功したがエラーがあるテストの表示image:images/show-error.png[]
* 次のテスト結果image:images/next-test-button.png[]または前のテスト結果image:images/previous-test-button.png[]への移動

「出力」ウィンドウには、PHPUnitスクリプトの完全な出力が表示されます。「テスト結果」ウィンドウ内の情報ではエラーの原因を特定できない場合に便利です。「テスト結果」ウィンドウと同様に、「出力」ウィンドウには、失敗したテスト・クラス行へのリンクが含まれます。また、テストを再実行したり、PHPの「オプション」ウィンドウを開いたりするためのボタンが左側にあります。image:images/options-link-button.png[]

image::images/test-result-output.png[]


[[code-coverage]]
== コード・カバレージ

PHP向けのNetBeans IDEには、PHPUnitのサポートとともにコード・カバレージがあります(IDEには、Pythonのコード・カバレージもあります)。コード・カバレージでは、すべてのメソッドがPHPUnitテストでカバーされるかどうかが確認されます。この項では、既存のCalculatorクラスでコード・カバレージがどのように機能するかについて説明します。

*コード・カバレージを使用するには:*

1. Calculator.phpを開き、 ``add2`` という ``add`` 関数の複製を追加します。 ``Calculator`` クラスは次のようになります。

[source,php]
----

<?php
class Calculator {
    /**
     * @assert (0, 0) == 0
     * @assert (0, 1) == 1
     * @assert (1, 0) == 1
     * @assert (1, 1) == 2
     * @assert (1, 2) == 4
     */
    public function add($a, $b) {
        return $a + $b;
    }

    public function add2($a, $b) {
        return $a + $b;
    }

}    
?>

----


. プロジェクト・ノードを右クリックします。コンテキスト・メニューから、「コード・カバレージ」>「コード・カバレージを収集し表示」を選択します。デフォルトでは、「エディタ・バーを表示」も選択されています。

image::images/turn-on-code-coverage.png[]



. エディタの最下部に、コード・カバレージのエディタ・バーが表示されます。コード・カバレージはテストされていないので、エディタ・バーには0%のカバレージが表示されます。(「クリア」をクリックしてテスト結果をクリアした後もこのように表示されます。)

image::images/editor-bar-before.png[]



. 「テスト」をクリックして開いているファイルをテストするか、または「すべてのテスト」をクリックしてプロジェクトのすべてのテストを実行します。テスト結果が表示されます。また、コード・カバレージのバーに、テストでカバーされている実行可能コード文の割合(パーセント)が示されます。エディタ・ウィンドウで、カバーされているコードは緑色で強調表示され、カバーされていないコードは赤で強調表示されます。

*警告: *add2関数を追加した後でテスト・ファイルを再生成した場合、PHPUnitテストは実行されません。これは、PHPUnitが2つの競合するtestAdd2関数を作成するためです。このような複数の関数についてPHPUnitを使用する場合、末尾に数字を付加することによって関数を区別しないでください。link:http://www.phpunit.de/ticket/701[+PHPUnitのドキュメント+]を参照してください。

image::images/editor-bar-after.png[]



. エディタ・バーで、「レポート」をクリックします。コード・カバレージのレポートが開き、プロジェクトに対して実行されたすべてのテストの結果が表示されます。レポート内のボタンを使用して、結果をクリアしたり、すべてのテストを再実行したり、コード・カバレージを非アクティブ化(「完了」をクリック)できます。

image::images/code-coverage-report.png[]



. プロジェクトに別のクラスを追加し、テスト・ファイルを削除して再作成して、コード・カバレージのレポートをもう一度確認できます。新しいクラスが表示されます。次のレポートでは、 ``Calculator`` クラスに、テストに含まれない関数が再度含まれています。

image::images/code-coverage-report2.png[]


[[project-specific-configurations]]
== プロジェクト固有の構成の使用

IDEでは、プロジェクトに次のカスタム構成を選択できます。

* ブートストラップ・ファイル
* XML構成ファイル
* テスト・スイート
* カスタムのPHPUnitスクリプト

*プロジェクト固有の構成を設定するには:*



. プロジェクトのノードまたはプロジェクトの「テスト・ファイル」ノードを右クリックし、「プロパティ」を選択します。「プロパティ」ダイアログが開きます。

image::images/project-ctxmenu.png[]



. 「PHPUnit」カテゴリを選択します。カスタムのブートストラップ、XML構成、PHPUnitスクリプト、またはテスト・スイート・ファイルを選択できるダイアログが開きます。

image::images/proj-properties.png[]



. ブートストラップの構造やXML構成ファイルに精通していない場合は、NetBeans IDEを使用してスケルトンを生成できます。また、「ヘルプ」をクリックして、ダイアログを使用する手順を調べることができます。

image::images/proj-properties-selected.png[]

カスタム・クラス・ローダーを使用するプロジェクトの場合、 ``__autoload()`` 特殊関数の実装などによる、_ブートストラップ・オプション_が必要です。プロジェクトの複数のクラスで使用するグローバル定数を定義するファイルなど、事前にファイルを含める必要がある場合も、ブートストラップ・オプションを使用します。

_XML構成ファイル_を使用して、コマンド行のコールに使用するオプションを定義できます。詳細は、link:http://www.phpunit.de/manual/3.3/en/appendixes.configuration.html[+PHPUnitのマニュアル+]を参照してください。XML構成ファイルを使用して、テスト・ケースに ``php.ini`` 設定やグローバル変数を定義することもできます。また、XML構成ファイルにブートストラップ・オプションを設定することもできます。

_カスタム・テスト・スイート_を設定すると、「実行」>「プロジェクトをテスト」を選択するたびに、このスイートが実行されます。これは、テストのサブセットのみを実行する場合や、データ・プロバイダなど、手動で追加する必要があるPHPUnitの最近追加された機能を使用する場合に非常に便利です。テスト・スイートは必要な数だけ定義でき、プロジェクト・エクスプローラでファイルを右クリックして「実行」を選択すると、それらを個別に実行できます。混乱を防ぐため、カスタム・テスト・スイートを使用するときには、NetBeansから通知があります。通知は、「テスト結果」および「出力」ウィンドウで確認できます。

「ツール」>「オプション」で選択したデフォルトのスクリプトのかわりに、プロジェクトの_カスタムPHPUnitスクリプト_を使用できます。カスタムPHPUnitスクリプトには、コマンド行のスイッチを含めることができます(link:http://www.phpunit.de/manual/3.7/en/textui.html[+PHPUnitのマニュアル+]を参照)。

 


[[selenium]]
== Seleniumフレームワークでのテストの実行

Seleniumは、Webアプリケーション用の移植可能なソフトウェア・テスト用フレームワークです。テストは、HTMLの表として記述したり、一般的なプログラミング言語でコーディングでき、最新のほとんどのWebブラウザで直接実行できます。Seleniumは、Windows、Linux、およびMacintoshにデプロイできます。詳細は、link:http://docs.seleniumhq.org[+SeleniumのWebサイト+]を参照してください。

NetBeans IDEには、Seleniumサーバーを含むプラグインがあります。このプラグインを使用して、PHP、Webアプリケーション、またはMavenプロジェクトに対してSeleniumのテストを実行できます。PHPに対してSeleniumのテストを実行するには、Testing SeleniumパッケージをPHPエンジンにインストールする必要があります。

*PHPに対してSeleniumのテストを実行するには:*

1. コマンド・プロンプトを開き、コマンド ``pear install Testing_Selenium-beta`` を実行します。パスに ``PHP_HOME/php/PEAR`` が含まれている必要があります。コマンドが正常に完了したら、プロンプトに ``install ok: channel://pear.php.net/Testing_Selenium-0.4.3`` と表示されます。
2. IDEで、「ツール」>「プラグイン」を開き、PHP向けのSeleniumモジュールをインストールします。
3. 「プロジェクト」ウィンドウで、Calculatorプロジェクトのプロジェクト・ノードを右クリックします。「新規」>「その他」を選択します。新規ファイル・ウィザードが開きます。「Selenium」を選択し、「次」をクリックします。

image::images/new-selenium.png[]



. Seleniumのテストを初めて作成するときは、Seleniumのテスト・ファイル用のディレクトリを設定するダイアログが開きます。これは、PHPUnitのテスト・ファイルとは別のディレクトリにします。そうしないと、単体テストを実行するたびにSeleniumのテストが実行されます。Seleniumのような機能的なテストの実行は、単体テストの実行よりも時間がかかるため、単体テストを実行するたびにこれらのテストが実行されることは避けたい場合があります。


. 名前と場所ページの設定はデフォルトのままにし、「終了」をクリックします。Seleniumの新しいテスト・ファイルがエディタで開き、「プロジェクト」ウィンドウに表示されます。

image::images/selenium-test-in-project.png[]



. プロジェクトのコンテキスト・メニューに「Run Selenium Tests」という項目が追加されます。この項目をクリックすると、PHPUnitテストと同様に、Seleniumのテスト結果が「テスト結果」ウィンドウに表示されます。


[[more-exercises]]
== その他の課題

有益なアイデアをいくつか紹介します。

* Calculator.phpに、2番目のクラス($aと$bの積を求める ``Calculator2`` クラスなど)を追加します。テストを削除して再生成します。
* 複数の部に分かれているlink:./wish-list-tutorial-main-page.html[+CRUDアプリケーションの作成のチュートリアル+]を試す場合は、最後のプロジェクトのSeleniumテストを作成します。
link:/about/contact_form.html?to=3&subject=Feedback:PHPUnit and Selenium on NB 6.7[+このチュートリアルに関するご意見をお寄せください+]


link:../../../community/lists/top.html[+users@php.netbeans.orgメーリング・リストに登録する+]ことによって、NetBeans IDE PHP開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。このリストはlink:http://forums.netbeans.org/[+NetBeans IDEフォーラム+]にミラーがあります。


== 関連項目

NetBeans IDEでのPHPのテストの詳細は、次のリソースを参照してください。

* link:http://blogs.oracle.com/netbeansphp/entry/phpunit_support_added[+PHP向けのNetBeansブログ: 追加されたPHPUnitサポート+]
* link:http://blogs.oracle.com/netbeansphp/entry/ui_for_phpunit_support[+PHP向けのNetBeansブログ: PHPUnitサポートのUI+]
* link:http://blogs.oracle.com/netbeansphp/entry/code_coverage_for_php_why[+PHP向けのNetBeansブログ: PHPのコード・カバレージ -- 理由+]
* link:http://blogs.oracle.com/netbeansphp/entry/recent_improvements_in_phpunit_support[+PHP向けのNetBeansブログ: PHPUnitサポートの最新の改善点+]
* link:http://wiki.netbeans.org/SeleniumPluginPHP[+NetBeans IDE Wiki: PHP用のSeleniumプラグイン+]
* link:./debugging.html[+NetBeans IDEでのPHPソース・コードのデバッグ+]

link:../../trails/php.html[+PHPの学習に戻る+]

