PHP Codeceptionテスト入門の入門

Published: 2017年6月25日 by tomsato

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

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧