トップ  > メモ一覧  > カテゴリ「テスト」の絞り込み結果 : 5件

5件中 1 〜 5 表示  1 

No.4473【引用】8時間耐久PHPUnitの教室 // Speaker Deck

8時間耐久PHPUnitの教室 // Speaker Deck
https://speakerdeck.com/u/yandod/p/8phpunit

引用元

更新:2012/05/30 17:58 カテゴリ: PHP  > テスト ▲トップ

No.4459【引用】PHPUnitでPrivateメソッドの単体テスト – qui-no Labs

PHPUnitでPrivateメソッドの単体テスト – qui-no Labs
http://labs.qui-no.com/185

皆さん、単体テストしてますか??
PHPで単体テストを実施する場合、私はPHPUnitを使用します。コーディングの時間が無く、テストを書けない時もありますが、出来ればTDD(テスト駆動開発)を実践したいですよね。

さて、今回はPHPUnitでPrivateやProtectedなどのアクセス権を設定したメソッドのテストコードについてです。

プライベートメソッドに対するテスト方法 で紹介されているような方法もあると思います...

引用元

更新:2012/05/24 18:47 カテゴリ: PHP  > テスト ▲トップ

No.4457【引用】PHPUnitでprivate,protectedのメソッドをテストする方法

PHPUnitでprivate,protectedのメソッドをテストする方法
 
PHPUnitなどでテストを実行するとき、
どうしても発生する問題がある。
それは

privateメソッドをテストできない

クラスを定義するときに、
privateやprotectedのプロパティ、メソッドを定義することは珍しくも無い。
特に複数人でシステムを組んでいるときはアクセス制限は非常に重要になってくる。
ただ、問題としてテストを行う際、
外部のプログラムであるPHPUnit側からアクセスが出来なくなりテストが出来ない。
そのためにpublicメソッドにする...

引用元

更新:2012/05/23 22:24 カテゴリ: PHP  > テスト ▲トップ

No.1982 simpletestの結果を色つきで出力

  色なし       $test->run(new TextReporter()); 
  色つき
      $test->run(new Cnv_Util_TestReporter()); 
更新:2010/01/10 15:14 カテゴリ: PHP  > テスト ▲トップ

No.1740 SimpleTest/基本的なメソッド一覧と使い方

SimpleTest/基本的なメソッド一覧と使い方


&strlen()文字


SimpleTestはPHPUnitと比べてはるかに多くのテスト用メソッドが用意されています。ここではSimpleTestの基本となる UnitTestCaseに実装されているテスト用メソッドの判定条件と、そのメソッドを使った実際に動作するテストケースを用意しました。これらのメ ソッドを利用して、テストの結果が特定の条件を満たしているかどうかをチェックします。一部のメソッドは古いバージョンにはなかったり、PHP4と PHP5で挙動がちがったりするので気を付けて下さい。(今回のテストケースはPHP5で動作させています。)

boolean assertEqual (mixed $first, mixed $second, [string $message = "%s"])

2つの変数の値が同じ時に成功します。

   function testAssertEqual(){

$a = 'hoge';
$b = 'huga';

$this->assertEqual($a, $b);
$a = $b;
$this->assertEqual($a, $b);

}

boolean assertNotEqual (mixed $first, mixed $second, [string $message = "%s"])

assertEqualの逆で、2つの値が同じでない場合成功になります。

   function testAssertNotEqual(){

$a = 'hoge';
$b = 'huga';

//同じでないので成功
$this->assertNotEqual($a, $b);
$a = $b;
//同じなので失敗
$this->assertNotEqual($a, $b);

}

boolean assertError ([string $expected = false], [string $message = "%s"])

エラーが発生した時に成功します。

   function testAssertError()
{
//エラーは発生していないので失敗
$this->assertError();
trigger_error('error');
//エラーが発生したので成功
$this->assertError();
}

void assertErrorPattern (mixed $pattern, [mixed $message = "%s"])

エラーの中にPerlの正規表現で指定した文字列が含まれている場合、成功します。

   function testAssertErrorPattern()
{
//エラーメッセージがhogeだったら
$pattern = '/hoge/';

//エラーが発生していないので失敗
$this->assertErrorPattern($pattern);

trigger_error('huga');

//エラーは発生しているがエラーメッセージがhogeではないので失敗
$this->assertErrorPattern($pattern);
trigger_error('hoge');
//hogeというエラーメッセージのエラーが発生したので成功
$this->assertErrorPattern($pattern);
}

boolean assertNoErrors ([string $message = "%s"])

エラーがなければ成功。ひとつでもあれば失敗になります。

   function testAssertNoErrors()
{
//エラーがないので成功
$this->assertNoErrors();
trigger_error('error');
//エラーがあるので失敗
$this->assertNoErrors();
}

boolean assertIsA (mixed $object, string $type, [string $message = "%s"])

対称のオブジェクトが特定のクラスがどうかを調べ、特定のクラスであれば成功。対称のオブジェクトが特定のクラスのサブクラスであっても成功となります。

   function testAssertIsA()
{
$a = new Hoge();
//Hogeを継承したHogeHoge
$b = new HogeHoge();

//$aはHogeクラスなので成功
$this->assertIsA($a, 'Hoge');
//指定するクラス名は小文字でも良い(成功)
$this->assertIsA($a, 'hoge');
//$bの親クラスはHogeなので成功
$this->assertIsA($b, 'Hoge');
}

boolean assertNotA (mixed $object, string $type, [string $message = "%s"])

特定のオブジェクトが指定したクラスでなければ成功となります。assertIsAの全く逆の挙動になるので、特定のオブジェクトが指定したクラスのサブクラスであっても失敗になります。

   function testAssertNotA()
{
$a = new Hoge();
//Hogeを継承したHogeHogeクラス
$b = new HogeHoge();

//クラス名が同じなので失敗
$this->assertNotA($a, 'Hoge');
//違うので成功
$this->assertNotA($a, 'huga');
//指定したクラスのサブクラスなので失敗
$this->assertNotA($b, 'Hoge');
}

boolean assertIdentical (mixed $first, mixed $second, [string $message = "%s"])

2つの変数の値と型が一致していた場合成功します。

   function testAssertIdentical()
{
$a = '0';
$b = 0;

//数字は同じだが型が違うので失敗
$this->assertIdentical($a, $b);
//文字列0を数値0にキャスト
$a = (int)$a;
//値も型も同じなので成功
$this->assertIdentical($a, $b);
}

boolean assertNotIdentical (mixed $first, mixed $second, [string $message = "%s"])

assertNotIdenticalと逆で2つの変数が値、型、ともに違えば成功になります。

   function testAssertNotIdentical()
{
$a = '0';
$b = 0;

//2つの値は同じだが型は違うので成功
$this->assertNotIdentical($a, $b);
$a = (int)$a;
//型も同じになったので失敗
$this->assertNotIdentical($a, $b);

}

boolean assertNull (null $value, [string $message = "%s"])

このメソッドは、引数の型がNULL以外の場合テストに失敗します。 以下のテストは両方とも成功になります。

   function testAssertNull()
{
$target = null;
$this->assertNull($target, 'type is ' . gettype($target));

//未定義の変数はNULLなので成功
$this->assertNull($undefined, 'type is ' . gettype($undefined));
}

boolean assertNotNull (mixed $value, [string $message = "%s"])

assertNullと逆の動作になります。

   function testAssertNotNull()
{
$target = 'aa';
$this->assertNotNull($target, 'type is ' . gettype($target));
//未定義の変数はNULLなので失敗
$this->assertNotNull($undefined, 'type is ' . gettype($undefined));
}

boolean assertPattern (string $pattern, string $subject, [string $message = "%s"])

特定の文字列に指定したパターンがマッチすれば成功になります。パターンはPerlの正規表現で記述します。バージョン1.0.1alpha以降で利用できます。

   function testAssertPattern()
{
$subject = 'hoge';
$pattern = '/gigigi/';
//hogeにgigigiは存在しないので失敗
$this->assertPattern($pattern, $subject);
$subject = 'gigigi';
//変数の内容が変わりマッチするようになったので成功
$this->assertPattern($pattern, $subject);
}

boolean assertNoPattern (string $pattern, string $subject, [string $message = "%s"])

assertPatternと逆の動作をします。バージョン1.0.1alpha以降で利用できます。

   function testAssertNoPattern()
{
$subject = 'hoge';
$pattern = '/gigigi/';
//hogeにgigigiは存在しないので成功
$this->assertNoPattern($pattern, $subject);
$subject = 'gigigi';
//変数の内容が変わりマッチするようになったので失敗
$this->assertNoPattern($pattern, $subject);
}

boolean assertReference (mixed &$first, mixed &$second, [string $message = "%s"])

2つの変数がどちらかの参照渡し(Reference)である場合に成功します。

   function testAssertReference(){

$a = new Hoge();
$b = clone $a;

//copyなので失敗
$this->assertReference($a, $b);

$a =& $b;

//参照なので成功
$this->assertReference($a, $b);
}

PHP5から代入はデフォルトで参照渡しになったのでこの関数のテストはPHP4とPHP5で挙動がかわります。

boolean assertCopy (mixed &$first, mixed &$second, [string $message = "%s"])

assertReferenceと逆の動作をします。

   function testAssertCopy(){

$a = new Hoge();
$b = clone $a;

$this->assertCopy($a, $b);

$a =& $b;

$this->assertCopy($a, $b);

}

PHP5から代入はデフォルトで参照渡しになったのでこの関数のテストはPHP4とPHP5で挙動がかわります。

void assertWantedPattern (mixed $pattern, mixed $subject, [mixed $message = "%s"])

assertPatternと同じ挙動です。既存のシステムとの互換性を保つ為に用意されているだけなので基本的にassertPatternを使って下さい、(非推奨メソッド)

void assertNoUnwantedPattern (mixed $pattern, mixed $subject, [mixed $message = "%s"])

assertNoPatternと同じ挙動です。既存のシステムとの互換性を保つ為に用意されているだけなので基本的にassertNoPatternを使って下さい、(非推奨メソッド)

boolean assertWithinMargin (mixed $first, mixed $second, mixed $margin, [string $message = "%s"])

第二引数が、「第一引数±第三引数」の間にある場合に成功します。バージョン1.0.1alpha以降で利用できます。

   function testAssertWithinMargin()
{
$a = 100;
$b = 105;
$c = 10;

//105は90と110の間にあるので成功
$this->assertWithinMargin($a, $b, $c);
}

boolean assertOutsideMargin (mixed $first, mixed $second, mixed $margin, [string $message = "%s"])

assertWithinMarginと逆の動作になります。バージョン1.0.1alpha以降で利用できます。

   function testAssertOutsideMargin()
{
$a = 100;
$b = 105;
$c = 10;

//105は90と110の間にあるので失敗
$this->assertWithinMargin($a, $b, $c);
}

以上がユニットテストケースクラスの基本のassertメソッドです。assertメソッド一覧の解説は本家サイトにもないので、複雑なメソッドを利用する時に役立つと思います。


SimpleTest便利ざます〜Add Star

いわゆるUNIT test系のプログラムなのですが。最近 SimpleTest がいたくお気に入り。

理由は「インストールがシンプルだから」。


とりあえず

http://simpletest.sourceforge.net/

からダウンロードtar ballがゲトれるはずなので、解凍して適当なディレクトリにほぉりこんで終わり。

ああなんてシンプルw


使い方のサンプルは

http://blog.zuzara.com/2007/03/01/194/

とか

http://project-p.jp/halt/kinowiki/php/SimpleTest

とか

http://project-p.jp/halt/kinowiki/:WD_29/SimpleTest/%E5%9F%BA%E6%9C%AC%E7%9A%84%E3%81%AA%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E4%B8%80%E8%A6%A7%E3%81%A8%E4%BD%BF%E3%81%84%E6%96%B9

とか

http://www.geocities.jp/toyprog/simpletest/first_test_tutorial.html

とか参照。


うるとら大雑把に書くと

<?php

require_once(simpletestが入ってるディレクトリ . 'unit_tester.php');
require_once(simpletestが入ってるディレクトリ . 'reporter.php');
require_once(テストしたいクラス);

class てけとうなクラス名 extends UnitTestCase
{

public function __construct()
{
  $this->UnitTestCase();
}

public function 適当なメソッド名()
{
  // テストしたい内容をご自由に
}

} // end of class

$test = new てけとうなクラス名;
$test->run(new HtmlReporter());

こげな感じ。

内部のメソッドは複数あってもOK。勝手に探し出してくれるらしい。

でも順番とか考えると、あんまりこねくり回さずに1メソッド集約のほうが楽な気もする。

この辺まだちゃんとホゲれてないので、よいアイデアあったら突っ込みよろです。


んで。肝心のテスト方法ってか記法

とりあえず極めてよく使ってるのが

assertEqual($result, $ans);

$result == $ansがtrueならOKしてくれる………ってまて。2a問題考えると微妙怖いぞ?

実験。結果。………予想通り orz


近いのを探す。光の速さで発見。

assertIdentical($result, $ans);

===なので、2a問題も平気…なはづ。

実験。結果。………予想通りよっしゃ!!


っつわけでとりあえず気を取り直して。

…っても、あと使うのは…

assertNull($value);

が、ようは「値がnullならok」してくれる。これの逆が

assertNotNull($value);

くらい?

なんでか、assertTrue はあまり使いませぬ。assertEqual………もとい、assertIdenticalで片付いてしまうので。


後は、ファクトリ系とかで使うのが

assertIsA ($obj, $type);

ようは「$objが$typeクラスに属してる(当人または子クラス) ならtrue」ってやつです。


厳密には、例外投げたときとかもいろいろやりたいんだけど(あるかもしれないんだけど調べてない)。

とりあえず近々に使う程度にゃ上述のメモで十分かと。おいら的には。


いぢょ。相変わらずのメモ書き〜

引用元

更新:2009/11/16 09:27 カテゴリ: PHP  > テスト ▲トップ
5件中 1 〜 5 表示  1 

FuelPHP

Mac

web開発

プロマネ

マネタイズ

プレゼン

webサービス運用

webサービス

Linux

サーバ管理

MySQL

ソース・開発

svn・git

PHP

HTML・CSS

JavaScript

ツール, ライブラリ

ビジネス

テンプレート

負荷・チューニング

Windows

メール

メール・手紙文例

CodeIgniter

オブジェクト指向

UI・フロントエンド

cloud

マークアップ・テキスト

Flash

デザイン

DBその他

Ruby

PostgreSQL

ユーティリティ・ソフト

Firefox

ハードウェア

Google

symfony

OpenPNE全般

OpenPNE2

Hack(賢コツ)

OpenPNE3

リンク

個人開発

その他

未確認

KVS

ubuntu

Android

負荷試験

オープンソース

社会

便利ツール

マネー

Twig

食品宅配

WEB設計

オーディオ

一般常識

アプリ開発

サイトマップ

うずら技術ブログ

たませんSNS

rss2.0