人気ブログランキング | 話題のタグを見る
PHPUnitのマニュアルを読んだ
PHPUnitのマニュアルを読んだときに記録したメモを記述する。

PHPUnitはPEARのライブラリ。PHP5.3.1ではインストールできななかった。5.3.17にしたらインストールできた。

イメージ的にJUnitとJMockとdbUnitを合体させたような感じ





@depends アノテーションを使った依存性の表現ができる。
これにより、依存しているテストが失敗した場合はテストの実行をスキップする。
複数のテストを依存先に設定することができ、どれか一つでも失敗したらテストをスキップする。
テストコードの記述順は関係ない。依存しているコードが後ろに書かれていても判定される。
しかし、循環するような依存を設定した場合、テストは実行されない。

@dataProvider アノテーションにより、データプロバイダ用のメソッドを設定できる。
データプロバイダ用のメソッドはパブリックであり、戻り値の型は配列、またはIteratorインターフェイスを実装している必要がある。これで、同じテストを反復して実行することが可能になっている。
途中で失敗した場合は、反復中のどこで失敗したか明示される。

例外の発生の有無は@expectedExceptionアノテーションを使用することで行える。
@expectedExceptionMessageアノテーションで発生するメッセージの確認も行える。
@expectedExceptionCodeアノテーションで発生するエラーコードの確認もできる。
アノテーションを使用しないで、try-cacheで $this->fail()を実行してもよい。

出力の期待値をあらかじめしていしておき、期待値どおりの内容が出力されたかどうか確認することもできる。
これにはexpectOutputString/expectOutputRegexを用いて行う。
もし、期待通りの出力がなければテストはしっぱいとなる。
setOutputCallbackを用いることで出力時の正規化などに使用するコールバック関数が指定できる。
テスト実行忠に発生する全ての出力が取り込まれることに注意する。strictモードでは出力を発生させるテストは失敗する。


PHPUnit のコマンドラインテストランナーでディレクトリを指定すると、 その中の *Test.php ファイルを見つけて実行します。
これにより、特定のディレクトリ以下のテストを一気におこなえます。
この場合、テストの実行順が制御できません。これに対応するため、XMLの設定ファイルにテストスイートを構成することができます。

DbUnit を使用してデータベースのテストも可能にしている。
これには「PHPUnit_Extensions_Database_TestCase」を継承してテストケースを記述する。
そして、次の抽象メソッドを実装する。
getConnection
 テストに使用するデーターベースへの接続を行う。
 データベースの接続情報はXML設定ファイルに記述して、そのファイルをテスト実行時に指定する。
 phpunitコマンドの--configurationパラメータを使用すればよい。
 
getDataSet
 個々のテストを実行する前のデータベースの初期状態がどうなるか記述する。
 使用できるデータセットは以下のとおり
  ・フラット XML データセット ・・・NULLが使えない
  ・XML データセット
  ・MySQL XML データセット (MySQL専用 mysqldump で作られたXMLファイル)
  ・YAML データセット
  ・CSV データセット ・・・ NULLが設定できない
  ・Array データセット
  ・Query (SQL) データセット
  ・Database (DB) データセット
   テスト用のデータベース接続にアクセスすると、 自動的にすべてのテーブルとその中身を含むデータセットを生成します
  ・Replacement データセット
   NULLとかを特定の文字に置き換える。
  ・データセットフィルタ
   DBデータセットと組み合わせてカラムを絞り込む。
  ・Composite データセット
   複数のデータセットをまとめる。

markTestIncompleteを使用して未完成のテストであることを明示できる。
テスト結果にはIncompleteにカウントされる。

テストのスキップはmarkTestSkipped()を使用する。
また、@requiresアノテーションを使用して、事前条件を指定することができる。
たとえば次のように記述すると、PHP5.3よりまえの環境ではテストをスキップする。
@requires PHP 5.3

スタブオブジェクトやモックオブジェクトを作成して実際のオブジェクトがなくてもテストを行えるようになる。
JMockとにたようなことができる。

次のようなコマンドでコードカバレッジを計測してレポートを出力する。
phpunit --coverage-html ./report BankAccountTest

次のようなコマンドでテストメソッドの名前を抜き出してドキュメントを作成する。
phpunit --testdox BankAccountTest
これにより開発者はこのクラスがどのように振舞うべきか知ることができる。4


PHPUnit Skeleton Generator を使うと、 プロダクションコードのクラスからテストクラスを生成したり その逆を実行したりすることができる。

以下の例だと、Calculatorクラスからそのテストをおこなうテストケース用のクラスを作成する。
phpunit-skelgen --test Calculator

以下の例だと、テストケースからテスト対象のクラスを作成する
phpunit-skelgen --class BowlingGameTest


PHPUnit_Selenium でSelenium Serverを使用してブラウザの互換テストが行える。
by mima_ita | 2012-10-02 23:38 | php
<< 実際にやったDBの自動テスト方法 VBAUnitを使用した単体テスト >>



実験ですお

by mima_ita
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ