タグ別アーカイブ: PHPUnit

PHPUnitでheader関数を使うメソッドのテスト

投稿日: 2016/12/13

まだ冬は本気をだしていないぞ〜。

以前こんな PHPUnitでajaxから呼ばれるモジュール(jsonをecho)のテストをする自分の解 | Shimabox Blogのを書きました。
その時はよく分からずmockを使えばうんたらかんたらみたいなことを書いちゃったのですが、最近同じようなケースがありまして、えぇ、調べ直したら実に簡単な方法があったのでメモっておきます。

ちなみに、PHPUnitのバージョンは4.8.31です。
続きを読んでみようかな…

PHPでテスト (PHPUnit / DBUnit) を書く前にする事とか依存性の注入とか

投稿日: 2016/11/18

最近凄く寒くなってきて、こういった本格的な冬までの移行期間に何を着たらいいのかわからないというか適切な洋服を持っていないくていつも困ります。
軽く羽織れてなおかついい感じの洋服が欲しいです。

今回は自分がPHPでテスト (PHPUnit / DBUnit) を書く前に、
まずテストが書ける様に行っていること
を書き連ねてみます。

例えば既存ソースの修正があって、それにはテストが無かったとします。
テストを書かないのが許されるのなんて小学生までだよね~、そうだよね~、よしテスト書くぞとなります。
で、ソースを見ます。
続きを読んでみようかな…

PHPUnitとPHPのバージョン対応表

投稿日: 2016/09/15

そこにペチパー(PHPer)が100人いたら97人はPHPUnitでテストを書く。
と言われている位(適当です)、PHPでは珍しくデファクトとなっているPHPUnit。

なにそうなのか!?と、いざ導入しようとしてwget https://phar.phpunit.de/phpunit.pharから入れたらPHPのバージョンが合っていなくて挫けそうになった経験。あると思います。

何故なら、PHPUnitの最新バージョンはPHP5.6以上を求めているからです。
※ 上記のwget 〜 では最新のPHPUnitが取得されます

そして恐らく、みんながみんなPHPのバージョンは最新では無いはずです。
(一番マシなのが5.5系でヘタすれば未だに5.3系なんてとこも??5.2系使っていたら頭おかしい)

え、じゃあ僕は5.5系使っているんだけど、どうしたらいいの?私は5.4系よ、どうしたらいいの?という事になりますが結論を先に書くと、

PHP5.6以上の人 => PHPUnitは 最新 のものでOK (今のところ)
PHP5.5以下の人 => PHPUnitは 4.8系 を使う (pharファイルはphpunit-4.8.27.phar)

という事になります。
つまり、それぞれこんな感じでインストールすればOKです。

  • PHP5.5以下 ( >= ) の人はこんな感じでバージョン指定する
$ wget https://phar.phpunit.de/phpunit-4.8.27.phar
$ chmod +x phpunit-4.8.27.phar
$ sudo mv phpunit-4.8.27.phar /usr/local/bin/phpunit
  • Chefだとこんな感じ(上のバージョン指定)

続きを読んでみようかな…

PHPで簡易ベンチマーク計測用ライブラリを書いた

投稿日: 2015/06/22

5歳になる息子が毎日ち○こと言わないと気が済まないようで困っています。
そうなると下の子(妹)も真似するわけで、家では毎日ち○こ祭りです。

というわけで、掲題にある通りPHPで簡易ベンチマーク計測用ライブラリを書きました。
ソースはこちらです。

shimabox/SMBBenchmark

なんで今更感半端ないものを書いたかというと、ベンチマークを取りたいときに、いつもググっては、microtime()とかtime()を書くのが面倒臭いなと思ったからであります。
※PEARのベンチマークライブラリがメジャーっぽいけど、PEARが使えるのかとか気にするのもあれだし

ぶっちゃけネットで得られる情報の寄せ集めなので大したことは無いんですが、せっかく書いたので公開します。
README.mdを見てもらえれば使い方は大体わかると思うのですが、こちらにも使い方を書いておきます。

使い方

上記の shimabox/SMBBenchmark からソースを落としてください。
※Packagistへはそのうち、、、 composerの対応しました。

続きを読んでみようかな…

PHPUnitでajaxから呼ばれるモジュール(jsonをecho)のテストをする自分の解

投稿日: 2015/03/27

東京はサクラ咲きまくってるけど、自分の住んでいるとこ(ちば)は全然咲いていなくて春なのか春じゃないのかよく分からない今日このごろ。

話は変わって、最近やっと案件でもPHPUnit書くようになってきたんだけども(個人的には書いてたよ。ほ、本当だよ。)、どうやってテスト書けばいいねんってケースに出くわしました。

それは、ajaxから呼ばれるプログラムのテストです。
そうっすAPIっす。
返却値(大体json形式ですよね)をechoするやつっす。
echoするやつのテストどうしたらええねんってやつっす。

※こんなやつです

function echoJson()
{
    header("Content-Type: application/json; charset=utf-8");
    echo json_encode(array("name"=>"Bob"));
}

呼んでも値受け取れないし、むしろ怒られるし。

Cannot modify header information - headers already sent by (output started at phar:///usr/local/bin/phpunit/phpunit/Util/Printer.php:172)

ob_start()ob_clean()で囲えば怒られないけど、何か

risky tests!

って言われるし。

2016/12/14 追記

PHPUnitでheader関数を使うメソッドのテスト | Shimabox Blog に書きましたが、@runInSeparateProcessob_start()ob_get_contents()ob_end_clean()を使う方法もあります。こちらで実装すれば

risky tests!

って怒られません。

2016/12/14 追記ここまで

でも、モックを使った解決策をちょっと思いついたので記しておきます。

続きを読んでみようかな…