phpunit phpunit
composer.jsonで、本番環境に必要ないのは
require-dev に記述する
続いてcomposer.jsonを作成します。PHPUnitは、本番環境の動作に必要無いのでreuqire-devに指定しましょう。
{
name : hogehoge/fugafuga
autoload : {
psr-4 : {
UnitTest¥¥Sample¥¥ : src/app
}
}
require : {
}
require-dev : {
phpunit/phpunit : 3.7.*
phake/phake : 2.*
}
}
phpunit.xmlを作るのよ
<?xml version= 1.0 ?>
<phpunit
bootstrap= ./tests/bootstrap.php
colors= true
convertErrorsToExceptions= true
convertNoticesToExceptions= true
convertWarningsToExceptions= true
verbose= true
stopOnFailure= true
processIsolation= false
backupGlobals= false
syntaxCheck= true
>
<testsuite name= sample tests >
<directory>./tests</directory>
</testsuite>
</phpunit>
Phakeって何よ?」って話ですね。これはモッキングフレームワークです。
PHPUnitにも強力なモッキングフレームワークは内蔵されているのですが、
こいつが結構堅苦しいヤツでして、テストコードの殆どがモックの生成に
費やされる羽目になることもあり、それだとテストコード見るのも嫌になっちゃうので、僕はPhakeを愛用しています
@group を使います。
手におえるサイズにしてリファクタリングしていきましょう。
このようにテストメソッドのアノテーションにグループ名をつけます。
* @group current
するとPHPUnitで、group名を指定して、該当グループのみ実行することが出来ます
最初にエラー又は失敗時にテスト実行を止める
先ほどの、 @group より簡単なのが、 --stop-on-failure です。
実装がされていない空のテストを除外してテストをすることも出来ますが、「未実装です」ということを明示した方がよいと思います。
未実装であるということをマーク付するには markTestIncomplete を使います。
$this->markTestIncomplete(
まだ実装されていません。
);
Iという未実装(Incomplete) のマーキングがされました。
-------------------------
PHPUnit には、既存のクラスからテストクラスの雛形を生成する機能があり
PHPUnit でモデルのテストクラスの雛形を生成してみるAdd Startmd45mukaken
phpunit --skeleton-test Blog_model ../application/models/blog_model.php
phpunit --skeleton-test Article ../app/Article.php
model controller 404 monkey patch db と
ツボを押さえた良いスライドになっています。
MonkeyPatch
オブジェクトの置き換えとして、 Mock を使うことで大体はカバーできるのですが
PHPでは「オブジェクトじゃないので Mock が作れない問題」に遭遇します。
そんなときに使える MonkeyPatch 機能はとても強力です。 このスライド見るまで気づかなかったのですが、なんと定数にも使えます!
PHPは定数の書き換えができなくて、テスト書くのを断念していた箇所があったのですが これ使えばよかったんですね。
http://www.slideshare.net/tetsuroy/code-igniter-ci-phpunittest
-------------------------
Laravel5でテスト(PHPUnit)
http://qiita.com/zaburo/items/839c81a1e166a48fe3fa
phpunit.xmlがカレントディレクトリに存在する場合、単にphpunitとコマンドを単独で実行すれば設定ファイルを読み込んでくれます。
<directory>でディレクトリを指定しておくと、その配下に存在するテストコード*Test.phpを全部見つけてきて、
テストしてくれます。ディレクトリ構造が複雑でも再帰的に探します。include文にいちいち悩む必要もなく、
テストコードからはシェバング行を取り除くことができ、きれいになりますね。
@testアノテーションを使う、日本語でテスト名をつける
テストメソッドは「test」で始まる名前をつける他、アノテーションでも指定できます。
テスト名を日本語でつけたい場合、始まりが「test」だと不格好なので、アノテーションを使うようにしています。
-------------------------
<logging>
<log type= json target= ./tests/results/logfile.json />
<log type= tap target= ./tests/results/logfile.tap />
<log type= junit target= ./tests/results/logfile.xml logIncompleteSkipped= false />
<log type= testdox-html target= ./tests/results/testdox.html />
<log type= testdox-text target= ./tests/results/testdox.txt />
</logging>
※PHPUnit Skeleton Generatorとは?
PHPUnit Skeleton Generator は、テストケースクラスをもとにしたクラスの雛形を自動的に生成するのに利用します。
NetBeans IDE 7.0.1でPHPUnitを使った単体テストの実験をしてみた。オプション設定で躓いたので備忘録的にまとめておきます。
1:メニューから[ツール]>[オプション]を選択する。
2:単体テストタブを選択する。
3:PHPUnit スクリプトを C:¥xampp¥php¥phpunit.bat から参照する。
・laravel
モデル
view
コントローラー
テスト
自動生成
netbeans phpunit
modelの場所
tasklist /?
PHPUnitおよびスケルトン・ジェネレータのスクリプトのパス
の設定からね
それでテストを自動生成するよ