Codeceptionとは
PHPのテストを簡単に行うためのテスティングフレームワーク
単体テスト、機能テスト、受け入れテストの3種類のテストを簡単に書くことができる
公式ドキュメントも日本語で読めるので敷居が低い
Codeception.docs.ja
しかしそれでも敷居が高い人や、使ってはいるけどあんまり理解していない人向けに簡潔にまとめていくこととする
Codeceptionはテストの実行環境としてPHPUnitを使用しているので、今まで PHPUnitを使っているテストでも、Codeceptionに移行するのは容易である。またテストを実行するためにPHPUnitを別途インストールする必要はない
実際にプロジェクトにCodeceptionを追加する話は次回としている
単体テスト・機能テスト・受け入れテスト
Codeceptionでは3つのテストを実装できる
受け入れテスト
作成したシステムを納品する際に、要求した機能や性能などを備えているかどうかを確認するためのテスト
ブラウザを開いてページが開けるか、リンクをクリックしたりフォームを操作したり、コンテンツの中身を確認したりなど、ユーザー視点によるアプリケーションのテスト(ユーザーシナリオ)を書いていくことになる
長所
- ユーザーシナリオなので、技術者ではないマネージャーに見せることができる
- DBやその他アプリケーションに関わるプラットフォーム全てが関わる総合的なテストなので本番に近いテストができる
短所
- 動作が遅い、単体テスト、機能テストよりもとても遅い
- 書いてあるテストしかチェックしないので、人間が見た時には気づける表示部分のバグが気づけない
機能テスト
受け入れテストとほぼ同様なテストが書けるが、機能テストではWebサーバーを立ててアプリケーションを動かす必要がない
これはウェブリクエストをエミュレートしてHTMLレスポンスを返すアプリケーションに送信している
長所
- 受け入れテストに似ているがWebサーバーを通さないので受け入れテストよりは高速
- 内部処理をリファクタリングしても最終的なレスポンスが変わらなければテストを修正する手間がかからない
短所
- JavaScriptやajaxなど動的なページはテストできない
- この仕組みは有名なフレームワークとのコネクタを使って実現しているため、アプリケーションはフレームワークが使われている必要がある
- Symfony
- Laravel5
- Yii2
- Yii
- Zend Framework 2
- Zend Framework 1.x
Phalcon - Slim(別途モジュールの追加が必要)
- Codeceptionとアプリケーションを同時に実行できる環境が必要になる
単体テスト(ユニットテスト)
自分たちが書いたプログラムに対するテストのこと
クラスや関数などを単体でテストを行う
長所
- テスト実行速度が早い
- 普段使われないような機能もテストできる
- モックを使うことでDB(や他プラットフォーム)を実際に繋がなくても取得した結果を仮定してテストを行うことができる
短所
- 少しの修正(関数の引数を変える、戻り値の形式を変えるなど)でテストが通らなくなりテストの管理コストがかかる
とりあえず使ってみる
検証環境
$ php -v PHP 5.6.30 (cli) (built: Jan 19 2017 08:09:42) $ cat /etc/redhat-release CentOS release 6.8 (Final)
ソースコード準備
$ git clone https://github.com/tomsato/codeception_test $ cd codeception_test $ composer install
サンプルを動かす
$ sudo php -S 0.0.0.0:80 -t public public/index.php
この状態で「http://localhost:80/hoge/test」にアクセスすると
「Home testtttt.」が表示される(この辺りは適当)
テスト実行
以下のコマンドでは受け入れテスト、機能テスト、単体テスト全てを実行する
(受け入れテストのテストコードは用意していない)
$ ./vendor/bin/codecept run
実行結果
その他の実行方法
// 受け入れテストだけ実行 $ ./vendor/bin/codecept run acceptance // 機能テストだけ実行 $ ./vendor/bin/codecept run functional // 単体テストだけ実行 $ ./vendor/bin/codecept run unit // テストファイルを指定して実行する $ ./vendor/bin/codecept run unit tests/unit/SampleAppTest.php
コメントを書く
コメント一覧