PHP Codeceptionテスト入門の入門


■ 目次

  1. Codeceptionとは
  2. テストの必要性
  3. 単体テスト・機能テスト・受け入れテスト
  4. とりあえず使ってみる

■ Codeceptionとは

PHPのテストを簡単に行うためのテスティングフレームワーク
単体テスト、機能テスト、受け入れテストの3種類のテストを簡単に書くことができる

公式ドキュメントも日本語で読めるので敷居が低い
Codeception.docs.ja
しかしそれでも敷居が高い人や、使ってはいるけどあんまり理解していない人向けに簡潔にまとめていくこととする

Codeceptionはテストの実行環境としてPHPUnitを使用しているので、今まで PHPUnitを使っているテストでも、Codeceptionに移行するのは容易である。またテストを実行するためにPHPUnitを別途インストールする必要はない

実際にプロジェクトにCodeceptionを追加する話は次回としている

プロジェクトに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

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です