Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
単体テストはpublicで公開されているものだけで十分という意見が主流のようだ。 しかしprtectedメソッドにもサブクラスに「使ってもらう」意図がある場合など、むしろしっかりテストで固めておきたい場合もある。 prtectedで定義されたメソッドは外部から呼べないので、テストは難しい。 よくやる方法は、単体テスト用にターゲットクラスのサブクラスを作ることだ。 PHPではメソッドのオーバーライドするときに、アクセスレベルをprotectedからpublic に緩めることができるので、 そのなかで親クラスのprtectedメソッドをしれっと呼び直せばよい。 <?php class Target { protected function getRealName() { return __METHOD__; } } ?> <?php class TargetExp extends Target
<?php require_once 'SampleClass.php'; class SampleClassTest extends PHPUnit_Framework_TestCase { public function testAccessProtectedProperty() { $foo = self::getProperty('foo'); $obj = new SampleClass(); $this->assertTrue($foo->getValue($obj)); } public function testAccessProtectedMethod() { $foo = self::getMethod('hoge'); $obj = new SampleClass(); $this->assertTrue($foo->invokeArgs($obj, array())
こんにちは。前回のPhakeのモックでCakePHPをテスト コントローラ篇にもレスポンスが頂けて嬉しいです。天の声に耳を傾けていると(ただのエゴ・サーチです…)素敵なご指摘が聞けたので、改訂版として掲載します。予定していた「コンポーネント篇」は改訂版のおかげで不要になりました! 準備も少なくて済む画期的な方法です。 ControllerでPhakeモックを使いたいという背景については前回の記事をそのまま残しますのでご参照ください。 -- ※本記事ではCakePHPにPhakeを導入する手法について解説しています。Phake自体の使い方やPHPUnit標準モックとの比較は過去の記事にて紹介しています。 2段階のサブクラスを作成する 前回と同じく、CakePHPのControllerTestCaseから機能を拡張するためMyControllerTestCaseを作成します。abstract
140313追記: 以下の方法を使わずに更にシンプルに準備できる改訂版を掲載しました。以下は古い内容をそのまま載せています。 -- 前回のPhakeのモックでCakePHPをテスト モデル篇の続きです。PhakeはPHPUnit標準のモック機構と違いWhen, Verifyに分けて定義を記述できる点が特徴で、流れを追いやすく一行もシンプルで済む今おすすめのモック・フレームワークです。 さて、このPhakeをCakePHPのController Testで活用しようとすると、いきなり壁にブチ当たります。 CakePHPはPHPUnitを標準採用している 幸か不幸かCakePHPはPHPUnitを標準で採用しており、高い親和性で書けるのが特徴ですが、Phakeといった外部テスト・フレームワークの入る余地は少なくなっています。 どうにかPhake一本でControllerのモック化が出来ないもの
環境 Windows 8.1 x64 en (Internet Explorerを動かすため) CentOS 6 (Webアプリを動かすため) PHP 5.3.3 (CentOS 6付属) あらかじめ必要なもの Composer PHPのパッケージマネージャです。Codeceptionをダウンロードするのに使用します。 Java runtime Selenium ServerはJavaでできています。 https://java.com/ja/download/ からJava runtimeをダウンロードしてインストールします。 Selenium ServerとIE Driver http://docs.seleniumhq.org/download/ から、Selenium ServerとThe Internet Explorer Driver Serverをダウンロードして同じディレクト
<?php class API_Test_Skeleton extends PHPUnit_Framework_TestCase { private $test_domain = "api-test.localhost"; private $test_url = "/path/to/test_api_root/"; /* * Post Helper * Thanks * http://www.programming-magic.com/20080226023511/ * and http://abbadabba.coolk2.com/212/ */ private function do_post_request($url,$value) { $headers = array('Content-Type: application/x-www-form-urlencoded','Conten
PhpStorm 7 が PHPUnit 4 をサポートしていなかったので少し前まで PHPUnit は 3.7 を使っていましたが、9 月に PhpStorm 8 がリリースされ、PHPUnit 4 も動作するようになったので、そろそろ使っていこうかと思います。 なお、PhpStorm 7 で PHPUnit 4 が使えなかったのは次の理由だそうです。 PHPUnit マニュアル – 付録D アップグレード PHPUnit_Framework_TestListener インターフェイスに addRiskyTest() が追加されました。 PHPUnit_Framework_TestListener インターフェイスを実装するクラスは、新たにこのメソッドを実装する必要があります。 たとえば PHPStorm 7 で PHPUnit 4 が使えないのは、これが原因です。 PHPUnit 3.
<?php class PickSlowListener extends PHPUnit_Framework_BaseTestListener { private $test_start_time; private $test_time_results = array(); private $rank_limit; public function __construct($rank_limit) { $this->rank_limit = $rank_limit; } public function startTestSuite(PHPUnit_Framework_TestSuite $suite) { $this->test_start_time = microtime(true); } public function endTestSuite(PHPUnit_Framework_Tes
IT業界の闇とは我々のことである お久しぶりです。もりすけと申します。 私はこのWebサービス業界に入ってこの方、 「SES(システムエンジニアリングサービス)」という形態で仕事を行っています。 我々にユニットテストのコストは計上されていない LaravelのDIコンテナはユニットテストと共に語られることが多く、 ユニットテストを回すという文化に触れる機会を逃していた私は、DIコンテナの有用性をしばらく理解できずにいました。 また理解する必要もないと思っていました。 ただ長いこと触れてみた結果、テスト抜きで考えても、DIコンテナにはそれなりのメリットがあると自分は考えています。 なので今回のテーマはこれです。 テスト抜きで考えて、DIコンテナの何がメリット足りうるのか そこを理解できればLaravelのDIコンテナを楽しく活用できるはずです。 前置きが長くなりましたが、ここからが本題です。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く