Symfoware

Symfowareについての考察blog

CodeIgniter 3 ユニットテストクラス(Library Reference - Unit Testing Class)

CodeIgniter User Guide

Library ReferenceのUnit Testing Classについて調べてみます。
Unit Testing Class



Unit Testing Class



CodeIgniterのテストはコントローラーに記載するようです。
ドキュメントを読んだだけでは使い方がつかめなかったので、
サンプルのテストを記載してみます。

Testというコントローラーを作成しました。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         
  13.         // テストしたい内容
  14.         $test = 1 + 2;
  15.         
  16.         // 予想されるテスト結果
  17.         $expected_result = 3;
  18.         // テストの名称
  19.         $test_name = 'Adds one plus one';
  20.         
  21.         // メモ
  22.         $test_note = 'Test note';
  23.         // テストを実行
  24.         $this->unit->run($test, $expected_result, $test_name, $test_note);
  25.         
  26.         // 結果を表示
  27.         echo $this->unit->report();
  28.         
  29.         // テスト結果以外の表示
  30.         echo 'ok';
  31.     }
  32.     
  33. }




ブラウザで表示してみるとこんな表示になります。

546_01.png


テストに失敗した時はこんな表示です。

546_02.png





データ型の比較



「結果がnullであるか」や「配列であるか」ということを比較したいケースがあります。
その時は第二引数に「is_null」や「is_array」という文字を指定すれば良いようです。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         
  13.         // テストしたい内容
  14.         $test = NULL;
  15.         // テストの名称
  16.         $test_name = 'null test';
  17.         // テストを実行
  18.         $this->unit->run($test, 'is_null', $test_name);
  19.         
  20.         // 結果を表示
  21.         echo $this->unit->report();
  22.         
  23.         // テスト結果以外の表示
  24.         echo 'ok';
  25.     }
  26.     
  27. }



546_03.png


以下の内容が指定可能です。


is_object
is_string
is_bool
is_true
is_false
is_int
is_numeric
is_float
is_double
is_array
is_null






テストの抑制



テストを実行したくない場合は、以下のように指定します。


  1. $this->unit->active(FALSE);




サンプルは以下のとおり。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         
  13.         // テストを停止
  14.         $this->unit->active(FALSE);
  15.         
  16.         // テストしたい内容
  17.         $test = NULL;
  18.         // テストの名称
  19.         $test_name = 'null test';
  20.         // テストを実行
  21.         $this->unit->run($test, 'is_null', $test_name);
  22.         
  23.         // 結果を表示
  24.         echo $this->unit->report();
  25.         
  26.         // テスト結果以外の表示
  27.         echo 'ok';
  28.     }
  29.     
  30. }




実行すると、テスト結果は表示されません。

546_04.png


ENVIRONMENTがproductionだったらテストを行わない。というような使い方になると思います。




結果表示の変更



set_test_itemsで、表示する内容を絞り込むことができます。
テスト名とテスト結果だけ表示してみます。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         
  13.         $this->unit->set_test_items(array('test_name', 'result'));
  14.         
  15.         // テストしたい内容
  16.         $test = NULL;
  17.         // テストの名称
  18.         $test_name = 'null test';
  19.         // テストを実行
  20.         $this->unit->run($test, 'is_null', $test_name);
  21.         
  22.         // 結果を表示
  23.         echo $this->unit->report();
  24.         
  25.         // テスト結果以外の表示
  26.         echo 'ok';
  27.     }
  28.     
  29. }




546_05.png



また、set_templateで完全に独自の内容を指定することも可能です。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         
  13.         $str = '
  14.         <table border="0" cellpadding="4" cellspacing="1">
  15.         {rows}
  16.                 <tr>
  17.                         <td>{item}</td>
  18.                         <td>{result}</td>
  19.                 </tr>
  20.         {/rows}
  21.         </table>';
  22.         $this->unit->set_template($str);
  23.         
  24.         // テストしたい内容
  25.         $test = NULL;
  26.         // テストの名称
  27.         $test_name = 'null test';
  28.         // テストを実行
  29.         $this->unit->run($test, 'is_null', $test_name);
  30.         
  31.         // 結果を表示
  32.         echo $this->unit->report();
  33.         
  34.         // テスト結果以外の表示
  35.         echo 'ok';
  36.     }
  37.     
  38. }




546_06.png






複数テストの実行



複数のテストを実行したい場合は、単純にrunを繰り返せばOKです。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         // テストを実行
  13.         $this->unit->run(1, 1, 'first test');
  14.         
  15.         $this->unit->run(2, 12, 'second test');
  16.         
  17.         $this->unit->run(3, 3, 'third test');
  18.         
  19.         // 結果を表示
  20.         echo $this->unit->report();
  21.         
  22.         // テスト結果以外の表示
  23.         echo 'ok';
  24.     }
  25.     
  26. }



546_07.png




型の厳密な比較



例えば、1とTRUEが等しいかテストしてみます。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         // テストを実行
  13.         $this->unit->run(1, TRUE, 'first test');
  14.         
  15.         // 結果を表示
  16.         echo $this->unit->report();
  17.         
  18.         // テスト結果以外の表示
  19.         echo 'ok';
  20.     }
  21.     
  22. }



テストをパスしました。

546_08.png


「==」による比較ではなく「===」による厳密な比較を行って欲しい場合は、
use_strictで指定します。


  1. <?php
  2. class Test extends CI_Controller {
  3.     
  4.     function __construct() {
  5.         parent::__construct();
  6.         
  7.         // unit_testライブラリのロード
  8.         $this->load->library('unit_test');
  9.     }
  10.     
  11.     public function index() {
  12.         // 厳密な比較を行う
  13.         $this->unit->use_strict(TRUE);
  14.         
  15.         // テストを実行
  16.         $this->unit->run(1, TRUE, 'first test');
  17.         
  18.         // 結果を表示
  19.         echo $this->unit->report();
  20.         
  21.         // テスト結果以外の表示
  22.         echo 'ok';
  23.     }
  24.     
  25. }



546_09.png


CodeIgniter 3のユーザーガイド(User Guide)まとめ

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/02/16(月) 22:02:37|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3 ユニットテストをコマンドで実行する | ホーム | CodeIgniter 3 データベースのマイグレーション(Library Reference - Migrations Class)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1625-aef9a8ca
この記事にトラックバックする(FC2ブログユーザー)