PHP

PHPUnitの使い方を仕組みから理解する

投稿日:2016年12月5日 更新日:


ここ数年仕事ではPHPを使って開発をしていますが、最近品質について考える機会が増えたこともあり、これを機にPHPUnitと周辺のモジュールの仕組みを理解してより楽にテストができるようにしたいと思います。

20161019203514

PHPUnitは?

Sebastian Bergmann

Created PHPUnit. Co-Founded thePHP.cc. Helps PHP developers build better software.

PHPUnitの作者は、Sebastian Bergmannという方でthePHP.ccのファウンダーのようです。関連情報は以下にて確認してみてください。

PHPUnitの構成

PHPUnitは以下のような構成になっています。

  • phpunit
    • php-code-coverage
    • php-file-iterator
    • php-text-template
    • php-timer
    • php-token-stream
    • phpunit
    • phpunit-mock-objects

これらはGitHub上ではそれぞれ別々のリポジトリに分かれていますが、phpunitが本体でそれ以外はデフォルトの関連ライブラリという位置づけになるかと思います。

PHPUnitのsrc構成

モックオブジェクトなどを除いたphpunitだけのパッケージとクラス構成を見てみるとこんな感じになります。

PHPUnitのメイン処理

PHPUnitでテストを実行するときのメイン処理をざくっと見てみます。

20161019200553

PHPUnit_TextUI_Command
PHPUnit_TextUI_TestRunner
TextUIのCommandとTestRunnerはphpunitのエントリポイントでphpunit実行時CommandからTestRunnerを呼び出し処理を開始します。

PHPUnit_Framework_Test(interface)
PHPUnit_Framework_TestSuite

TestRunnerはTestSuiteを作成しTestSuiteのメイン処理であるrun処理を実行します。

20161019195137

PHPUnit_Framework_Test(interface)
PHPUnit_Framework_Assert
PHPUnit_Framework_TestCase
PHPUnit_Framework_TestResult

20161019195138

TestSuiteはforeachにて順次TestCaseのテストを実行します。また、TestCaseの親クラスにはAssertがいてアサーションができるようになっています。

テストを実行する該当ソースをチェックする

TestSuite.php

TestRunnerから呼び出されたTestSuiteは、run処理にて対象テストをforeachして順次テストを実行します。

TestCase.php

TestCaseのrun処理ではTestResultのrun処理を実行します。

TestResult.php

TestResultのrun処理では、渡されたTestCaseのrunBare()を実行します。

TestCase.php

TestCaseのrunBare処理がテスト実行の最終地点で、before・after等のhookポイントを使いsetUp、テスト、tearDownを実行します。TestResultから呼び出しているのはテスト結果をTestResultが処理する為でしょう。実行後は順次TestResultが処理の呼び出し元に順に返され処理が終了します。

かなりざっくりではありますがphpunitのメイン処理を確認してみました。だいたいの処理の流れは分かったので次回はモックオブジェクトを見ていこうと思います。


-PHP
-,

執筆者:

関連記事

PHPUnitのモックオブジェクトの使い方を仕組みから理解する

前回はPHPUnitのメイン処理を確認しました。今回はPHPUnitデフォルトのモックオブジェクトの仕組みを確認してみます。公式ドキュメントでは、第9章 テストダブルが該当箇所となります。 PHPUn …

PHPのモッキンフレームワークPhakeの使い方

前回に引き続きPHPUnit関連の記事です。今回はPHPのモッキンフレームワークであるPhakeの使い方を確認します。 Phakeについて 作者は? Mike Livelyという方のようです。 twi …