CakePHP2.x フレームワークで用意されたテストツールの使用方法・PHPUnit

CakePHP2.x フレームワークで用意されたテストツールの使用方法・PHPUnit

CakePHP2.x系で公式マニュアルに従って、フレームワークで用意されたテストツールを使用してみました。その手順などを記録しておきます。

確認環境 CakePHP2.10.2

公式マニュアル

https://book.cakephp.org/2.0/ja/development/testing.html

公式マニュアルに従ってやれば間違いないです。

テストDBの設定

テストツールがさわるDBの設定です。特殊な書き方など不要であらかじめフレームワーク側で用意してくれていますので使わなきゃ損です。ローカルならローカルDBそのまま設定すれば良いと思います。

app/Config/database.php

public $test = array(
  'datasource' => 'Database/Mysql',
  'persistent' => false,
  'host' => 'dbhost',
  'login' => 'dblogin',
  'password' => 'dbpassword',
  'database' => 'test_database'
);

テストケースの作成

app/Test/Case/View/Helper/ProgressHelperTest.php

<?php
App::uses('Controller', 'Controller');
App::uses('View', 'View');
App::uses('ProgressHelper', 'View/Helper');

class ProgressHelperTest extends CakeTestCase {
  public function setUp() {
    parent::setUp();
    $Controller = new Controller();
    $View = new View($Controller);
    $this->Progress = new ProgressHelper($View);
  }

  public function testBar() {
    $result = $this->Progress->bar(90);
    $this->assertContains('width: 90%', $result);
    $this->assertContains('progress-bar', $result);

    $result = $this->Progress->bar(33.3333333);
    $this->assertContains('width: 33%', $result);
  }
}

テスト対象の作成

app/View/Helper/ProgressHelper.php

<?php
class ProgressHelper extends AppHelper {
  public function bar($value) {
    $width = round($value / 100, 2) * 100;
    return sprintf(
    '<div class="progress-container">
    <div class="progress-bar" style="width: %s%%"></div>
    </div>', $width);
  }
}

テストの実行

コマンド実行(xampp環境だとこう)

php app\Console\cake.php test Test\Case\View\Helper\ProgressHelperTest.php

ブラウザ

localhost/test.php

webrootの中にtest.phpというファイルが最初からあるのでそれです。

自分でいつもtest.phpとか作ってると紛らわしいですね・・。

テスト実行後の結果画面でコードカバレッジも確認可能。設定は下に記載

コードカバレッジの確認

xdebugのインストール

xamppだとphp.iniの以下コメント解除するだけ

;zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
 ↓
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"

php -m でxdebugが表示されればOK

 

という感じであとはテストコードを書くだけでした・・・。(それが大変

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

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