Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
86
Help us understand the problem. What is going on with this article?
@aozora0000

PHPUNITのテストメソッド実行前後の処理まとめ

More than 5 years have passed since last update.

PHPUNITのテストメソッド実行前後の処理まとめ

概要

PHPer界隈からも割と敬遠されがちなPHPUNIT。
ただでさえ書くのが面倒なテストですが、僕は毎回PHPUnit_Framework_TestCaseが覚えられずにぐぐってしまいます・・・

DB関連やリクエスト関連のテストで良く使うのが、前処理・後処理等の下処理。
setUpとtearDownを主に使いますが、実は他にも色々な下処理やフック処理が出来たりします。

一応PHPUNITマニュアルにもあるのですが、特に僕含むPHPUNIT初心者の方の為にざっくりとまとめてみました。

メソッド名の手前に(static)がある場合、public static ~~でメソッドを追加しましょう。

一覧

各テストメソッド毎に実行

setUp

各テストメソッドの実行前に呼ばれるメソッド。
テストメソッド毎に同じ環境を用意し、メソッド内で動的に変化させて追従したい場合に便利。
(利用例)モック用オブジェクトの生成・テスト用データベースの生成・ファイルの生成

tearDown

各テストメソッドの実行後に呼ばれるメソッド。
次のテストメソッドに影響が出ない様に、データベースやファイルの破棄をするのに便利。
(利用例)テスト用データベースの破棄・ファイルの破棄

テストクラス内で一度だけ実行

(static) setUpBeforeClass

一番最初のテストメソッド実行前(setUp()よりも前)に呼ばれるメソッド。
全てのテストメソッドで同じ物を使いまわしたい、テスト内で動的に変化させて追従したい場合に便利。
(利用例)テスト用テーブルの作成等・テスト利用ファイルの生成等

(static) tearDownAfterClass

一番最後のテストメソッド実行後(tearDown()よりも後)に呼ばれるメソッド。
全てのメソッドで使いまわしたり生成したファイル等を掃除したりする場合に便利。
(利用例)テスト用テーブルの削除・ファイルの削除等

assert系メソッドのフック

assertPreConditions

assert系メソッドの実行直前に毎回実行されるメソッド。
正直、いつ使うのか分かりません・・・

assertPostConditions

assert系メソッドの実行直後に毎回実行されるメソッド。テストが落ちた場合、実行はされない。
これもいつ使うのかが想像出来ません。

assert不合格時のフック

onNotSuccessfulTest

assertメソッドのテストに合格しなかった場合、tearDown()の後に実行されるメソッド。
引数としてExceptionが投げられ、throwしたりゴニョゴニョしたり出来ます。
エラーメッセージを分かりやすくしたり、個別でログに残したりすると便利かもしれません。

まとめ

テスト実行時の処理順としては

public __construct();
public static setUpBeforeClass();

# テストメソッド繰り返し
    public setUp();
    public assertPreConditions();

    # assertメソッド実行
    if (assert() === true) {
       public assertPostConditions();
       public tearDown();

    } else {
       public tearDown();
       public onNotSuccessfulTest(Exception $e);

    }
# テストメソッド繰り返し

public static tearDownAfterClass();
public __destruct();

かなり見難いですが、こんな感じになるかと思います。
処理順については、時間があれば画像に差し替えたいと思います。

各メソッドの説明に個人的意見が含まれていますが、「こんな使い方あるよー!」という例題があればどんどん編集お願い致します!
それでは良いテスト生活を。

86
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
aozora0000
大阪在住のエンジニア3年生、LAMP/LNMPでだらだら開発しています。 Webデザインからサーバー構築まで担当しています。 php/css/js/nodejs/golang/crystal

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
86
Help us understand the problem. What is going on with this article?