|
より複雑なテスト
実際には、前回よりもさらに複雑な状況に対処する必要があることは間違いありません。たとえば、一般的なテストは、以下の OutputArray メソッドが特定のデータ構造の配列を返すかどうかを確認することです。
3
|
public function outputArray()
|
4
|
{
|
このメソッドの簡単なテストは次のように記述できます:
01 |
class ArrayTester extends PHPUnit_Framework_TestCase
|
03 |
function testArrayTeller()
|
05 |
$at = new ArrayTeller();
|
06 |
$result = $at ->outputArray(1);
|
07 |
$this ->assertInternalType( "array" , $result );
|
08 |
$this ->assertCount(3, $result );
|
09 |
$this ->assertEquals(1, $result [0]);
|
10 |
$this ->assertEquals(3, $result [2]);
|
ご覧のとおり、単体テストに PHPUnit を使用する場合、各行でさまざまなチェックを実行できます。ArrayTeller が他のデータ クラスではなく配列を返すかどうかをチェックできます。
type; 配列の長さをチェックできます; 配列内の単一の値をチェックできます。これらに加えて、他の関数アサーションもあります。たとえば、より複雑な判断が必要な場合、戻り値が 2 つの整数の間にあるかどうかを知りたいとします。
数値の範囲内で、IF ステートメントの結果で表現できる限り、アサーション AssertTrue を使用して結果をテストできます。次のリンクをクリックすると、PHPUnit 公式 Web サイトのドキュメントで利用可能なすべてのアサーションのリストにアクセスできます。
Zhao Liang-I 昨日(14:25)翻訳しました
0いいね
いいね 素敵な翻訳ですね!
|
その他の翻訳(1)
|
テストコードのパス
簡単に言うと、単体テストとは、できれば仕様書に基づいて、テスト対象のメソッドの予想される動作をすべてカバーするテストを作成することを意味します。ただし、既存のコードをカバーする単体テストを作成する場合は、次のように考えるとより便利です。ホワイトボックステストの一種。以下のような簡単な切り替え方法を知っている場合:
03 |
public function aOrB( $switch , $a , $b )
|
… 状況ごとに 1 つずつ、合計 2 つのテストを作成する必要があることがわかります。しかし、どうやってこれを知るのか疑問になり始めます。後でメソッドが True になった場合は $a を返し、False になった場合は $b を返します。それ以外の場合は例外をスローします。仕様ドキュメントのどこかに記載されているのが理想的です。とにかく、上記のメソッドのテストは次のとおりです:
01 |
class SwitcherTester extends PHPUnit_Framework_TestCase
|
03 |
function testSwitchTrue()
|
05 |
$switcher = new Switcher();
|
06 |
$result = $switcher ->aOrB(TRUE, 1, 2);
|
07 |
$this ->assertEquals(1, $result );
|
09 |
function testSwitchFalse()
|
11 |
$switcher = new Switcher();
|
12 |
$result = $switcher ->aOrB(FALSE, 1, 2);
|
13 |
$this ->assertEquals(2, $result );
|
両方のテストの実行は、コマンドラインから phpunit SwitcherTester を実行するのと同じくらい簡単です。
|
PHP 単体テストに PHPUnit を使用する_PHP チュートリアル 昨日 (14:46) を翻訳しました
0いいね
いいね 素敵な翻訳ですね!
|
setUp を使用して複数のテストを簡素化する
テストでさらに多くの入力の組み合わせとデータ設定をカバーする必要がある場合、関数 setUp を使用すると非常に役立ちます。セットアップはい
PHPUnit_Framework_TestCase
クラス内のすべてのテストが実行される前に実行するようにオーバーライドできるクラス内のコード。 (すべてのテストが終了した直後に実行される簡単なメソッド、tearDown もあることに注意してください。これは、テストを終了するのに役立ちます
ソケットとファイル ポインタが役立ちます)
以下は、コードを合理化する方法の簡単な例です。オブジェクト データと入力に依存する方法を試してください。
04 |
public function __construct( $data )
|
08 |
public function outputData( $switch )
|
12 |
if (! empty ( $this ->data))
|
以前の単純なアプローチを続ける場合は、テストごとに 1 回ずつ、3 つのテストを作成し、3 つの DataTeller オブジェクトをインスタンス化する必要があります。ただし、
setUp を実行すると、3 つのうち少なくとも 2 つである DataTellers オブジェクトの作成を外部委託できます。最後のテストのみ、新しい DataTeller を作成する必要があります。
01 |
class DataTellerTester extends PHPUnit_Framework_TestCase
|
04 |
protected $data = "valid data" ;
|
07 |
$this ->dt = new DataTeller( $this ->data);
|
09 |
function testOutputArraySwitchOff()
|
11 |
$this ->assertEquals( "switch off" , $this ->dt->outputData(FALSE));
|
13 |
function testOutputArraySwitchOn()
|
15 |
$this ->assertEquals( $this ->data, $this ->dt->outputData(TRUE));
|
17 |
function testOutputArrayEmptySwitchOn()
|
19 |
$new_dt = new DataTeller( "" );
|
20 |
$this ->assertEquals(FALSE, $new_dt ->outputData(TRUE));
|
|
PHP 単体テストに PHPUnit を使用する_PHP チュートリアル 昨日 (15:03) を翻訳しました
0いいね
いいね 素敵な翻訳ですね!
|
結論
PHPUnit はアサーションを使用して、テストしているコードが期待どおりに動作しているかどうかを通知します。これを学習すると、比較的独立した関数を持ついくつかのクラスをカバーするための簡単なテストをいくつか作成できるようになります。
しかし、本当の課題は、相互に対話するクラスをテストするときに起こります。これを行うには、次のチュートリアルを聞いて、静的クラスのテストの作成方法とモックの使用方法を学びます。
スタブ (スタブ、スタブ) は、テストするオブジェクトをその環境内の他のコードから分離します。
多読
* PHPUnit マニュアル * PEAR サイトの PHPUnit チュートリアル
著者について
Kendrick Curtis は 10 年の経験を持つ Web 開発者です。彼は、受託 Web デザイン、開発、テスト、コンテンツ作成を提供する会社、Stainless Software の創設者です。詳細については、同社の Web サイトをご覧ください: http://www.stainless-software.com/
http://www.bkjia.com/PHPjc/440325.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/440325.html技術記事 PHPUnit は、PHP プログラミング言語で開発されたオープン ソース ソフトウェアであり、単体テスト フレームワークです。 PHPUnit は Sebastian Bergmann によって作成され、Kent Beck の SUnit から派生したもので、xUnit ファミリのフレームワークの 1 つです。 ...
|