その中でバグを2件見つけてPRしたので、参考までに。記述によってSubmitされないケースがありました。機能テストでGETパラメータがコントローラに渡らないZF2モジュールにバグがありました。ケース1<?php$I->amOnPage('/?foo=bar');GETパラメータfooがコントローラに渡されませんでした。/></form>というフォームに対して、<?php$I->click('Submit');とした場合にやはりGETパラメータfooがコントローラに渡されませんでした。実際のPRはこちら2つのPRは無事にマージされたので、おそらく1.8.5にてリリースされると思います。英語が苦手なもので(汗)毎回のPRに苦労するのですが、取り込まれたときはテンションあがりますね!なにより「世界と繋がっている感覚」、味わえます。11:42Codeceptionにバグ修正をプルリました。AspectMockTLで話題になっているCodeIQでの問題と解説はこちらです。MAGAZINE大変丁寧な解説、とても参考になりました。参加されている方の採用したテスティングフレームワークにCodeceptionがない!日本のPHP開発者にCodeceptionを流行らせたいワタクシとしては看過できない事態(=チャンス)です!ってことで、Codeceptionを使って書いてみました。いいつつも、今回はCodeceptionがメインではなく、AspectMockがメイン。ordinary)」PHP向けのモッキングフレームワーク。fly)にメソッドを再定義できる憶えやすいシンプルな構文を実現しています。解説されていますので簡単に。AOPの仕組みですが、独自のストリームラッパーを利用してincludeやrequireしたファイルをその場で解析、定義されているメソッドを抽出し、横断的関心事をウィービングするようです。(これをPHPのみで実現しているのはすごいですね。処理重そうな感じしちゃいますが。AOPの仕組みを利用し、全てのメソッドの一番最初に「Stubがあればそれ返してよ!」という処理をブッコミます。アプローチAspectMockの仕組み上、PHPの標準関数に対するテストダブルは作成できないので、getHourのようなメソッドを作成し、それに対するテストダブルを作成します。installします。bootstrapします。testsディレクトリ配下に必要なファイル群が作成されますので、tests/_bootstrap.phpを以下のように編集し、AspectMockを初期化します。和田卓人さんも「組み込みクラス/メソッド/関数に介入する」アプローチの注意点として、以下のようにお書きでした。このアプローチのデメリットは、強力さの裏返しです。力には責任が伴います。組み込みクラス/メソッド/関数の動きを変えるというのは、影響の大きい変更です。(中略)ゆえに、このアプローチを使う場合には、テスト後の始末を忘れずに行うことが重要です。テストの中で振る舞いを変えた標準クラス/メソッド/関数を元に戻しておかないと、他のテストにも影響が残ります。tests/_helpers/CodeHelper.phpに後始末を以下のように記述します。Greeterを実行し、Greeterクラスに対する単体テストをtests/unit/GreeterTest.phpに作成します。Greetersrc/Greeter/Greeter.phpを以下のように実装しました。getHourは標準関数timeを使い、時間に変換して返します。ここをAspectMockでstubすれば、テスタブルになります。GreeterTesttests/unit/GreeterTest.phpに以下のようにテストを記述しました。$greeter->greet());等、普通に使えます。PHPUnitからCodeceptionに乗り換えましょう。Test)和田卓人さんも言及していた、PHPUnitのデータプロバイダ、Codeceptionのバージョン1.8から利用できるようになりました!だから、さっさとPHPUnitからCodeceptionに乗り換えましょう。