@assertを使用したPHPUnitのテストコード雛形の作成(phpunit-skeleton-generator+Eclipse)
PHPUnitのテストコードひな形の作成に「skeleton-generator」を使うと、
既存のクラスからメソッドのテストソース(スケルトン・器)を自動作成できます。
さらに@assertにてコメントを定義しておくことで、
メソッド作成時にテストをしたいパターンなどを書き残しておくことができます。
「skeleton-generator」はその@assertパターンのテストコードを自動作成します。
概要
@assertを使用したPHPUnitのテストコードひな形の作成(phpunit-skeleton-generator+Eclipse)
PHPUnitのテストコードひな形の作成に「skeleton-generator」を使う
全体の流れは以下でご紹介していますので、
手順については以下でご確認ください。
ここでは更に「@assert」を利用したテストパターンを、
クラス側に定義しておき後からテストパターンを自動作成する例についてご紹介します。
前回同様、テスト対象とするサンプルプログラム(クラスファイル)は以下のように定義しています。
引数同士を加算して、答えを返すだけの単純なものです。
「@assert」で定義できるパターン
「@assert」をコメント欄に記載する際に利用できる記載方法は、
ヘルプに以下のように書かれています。
表 16.1 に、サポートされる
@assert
の種類と、それがどのようなテストコードに変換されるかをまとめました。表16.1 サポートされる @assert アノテーション
アノテーション 変換後の内容 @assert (...) == X
assertEquals(X, method(...))
@assert (...) != X
assertNotEquals(X, method(...))
@assert (...) === X
assertSame(X, method(...))
@assert (...) !== X
assertNotSame(X, method(...))
@assert (...) > X
assertGreaterThan(X, method(...))
@assert (...) >= X
assertGreaterThanOrEqual(X, method(...))
@assert (...) < X
assertLessThan(X, method(...))
@assert (...) <= X
assertLessThanOrEqual(X, method(...))
@assert (...) throws X
@expectedException X
関数(メソッド)を定義した段階で、
コメント欄を利用して、テストを行いたいパターンを設定しておけるのは非常に便利です。
実際に「@assert」を設定してテストコードを作成してみます。
テストコードは以下のように定義しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php class Calculator { /** * @param unknown $a * @param unknown $b * @return number * * @assert (1, 2) == 3 * @assert (1, 2) != 4 * @assert (2, 3 ) === 5 * @assert (2, '3') !== '5' * @assert (4, 5) > 8 * @assert (4, 5) >= 9 * @assert (6, 7) < 14 * @assert (6, 7) <= 13 */ public function add($a, $b) { return $a + $b; } } |
コメント部に記載している@assert部がそれぞれこのメソッドに対する
テストパターンの1つ1つです。
skeleton-generatorの実行によるテストコード生成
skeleton-generatorの実行にはクラス名の入力が必要です。
事前に、対象クラス名をコピーしておきます。
「実行」-「外部ツール」から作成済みのツールを実行します。
尚、これは以下で作成した外部ツールを選択しています。
ダイアログが表示されますのでクラス名を入力します。
すぐに実行されテストコードが生成されます。
作成されたテストコードは以下のようになりました。
「phpunit-skeleton-generator」を使う場合の流儀に従って、
※フォルダの移動とライブラリの読み込み指定行っています。
※また5行目は手動で挿入しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
<?php /** * Generated by PHPUnit_SkeletonGenerator on 2018-05-19 at 15:46:39. */ require_once 'C:\Apache2464\htdocs\target\testClass.php'; class CalculatorTest extends PHPUnit_Framework_TestCase { /** * @var Calculator */ protected $object; /** * Sets up the fixture, for example, opens a network connection. * This method is called before a test is executed. */ protected function setUp() { $this->object = new Calculator; } /** * Tears down the fixture, for example, closes a network connection. * This method is called after a test is executed. */ protected function tearDown() { } /** * Generated from @assert (1, 2) == 3. * * @covers Calculator::add */ public function testAdd() { $this->assertEquals( 3 , $this->object->add(1, 2) ); } /** * Generated from @assert (1, 2) != 4. * * @covers Calculator::add */ public function testAdd2() { $this->assertNotEquals( 4 , $this->object->add(1, 2) ); } /** * Generated from @assert (2, 3 ) === 5. * * @covers Calculator::add */ public function testAdd3() { $this->assertSame( 5 , $this->object->add(2, 3 ) ); } /** * Generated from @assert (2, '3') !== '5'. * * @covers Calculator::add */ public function testAdd4() { $this->assertNotSame( '5' , $this->object->add(2, '3') ); } /** * Generated from @assert (4, 5) > 8. * * @covers Calculator::add */ public function testAdd5() { $this->assertGreaterThan( 8 , $this->object->add(4, 5) ); } /** * Generated from @assert (4, 5) >= 9. * * @covers Calculator::add */ public function testAdd6() { $this->assertGreaterThanOrEqual( 9 , $this->object->add(4, 5) ); } /** * Generated from @assert (6, 7) < 14. * * @covers Calculator::add */ public function testAdd7() { $this->assertLessThan( 14 , $this->object->add(6, 7) ); } /** * Generated from @assert (6, 7) <= 13. * * @covers Calculator::add */ public function testAdd8() { $this->assertLessThanOrEqual( 13 , $this->object->add(6, 7) ); } } |
それぞれのテストパターンに従ってソースが作成されていますので、
実際にテストを実行します。
テストコードを選択した状態で「MakeGood」タブを選択し、
「再生」アイコンの実行をクリックします。
実行後はコンソールにテストの実行結果が表示されます。
MakeGoodタブでもグリーンバーによる全テスト成功と
「成功:8」と成功数が表示されています。
「TestOutline」タブではメソッドごとのテスト結果が一覧で見られます。
テストがエラーの場合の確認
今回はテストが予定通りの結果を返し、
すべて成功していますが、エラーをあえて発生させます。
以下では、1+2の結果を32としてエラーを生成します。
実行すると、testAdd()メソッドでエラーとなり、テスト失敗表示となります。
対象メソッドの部分にも「×」が表示されています。
このようにメソッドを書いているタイミングで、
コメント欄にテストさせたいパターンをコメント記述しておくことで、
メソッドの作成後に想定パターンのテストを自動生成することができ、便利です。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人アルゴリズンが著作権を保持しております。
当サイトでご紹介しております写真等につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
公開日: