| Prev | Next |
PHPUnit の目指すところ (第 2 章 を参照ください) のひとつに 「自由に組み合わせられる」ということがあります。つまり、 例えば「そのプロジェクトのすべてのテストを実行する」「プロジェクトの中の ある部品を構成するすべてのクラスについて、すべてのテストを実行する」 「特定のひとつのクラスのテストのみを実行する」など、 数や組み合わせにとらわれずに好きなテストを一緒に実行できるということです。
PHPUnit フレームワークの PHPUnit_Framework_TestSuite クラスを使用すると、複数のテストを階層構造でテストスイートにまとめることができます。 実際の例として、PHPUnit 自身のテストスイートを見てみましょう。
例 7.1 は Tests/AllTests.php の一部を抜粋したもの、そして 例 7.2 は Tests/Framework/AllTests.php の一部を抜粋したものです。
例 7.1: AllTests クラス
<?php
require_once 'PHPUnit/Framework.php';
require_once 'Framework/AllTests.php';
// ...
class AllTests
{
public static function suite()
{
$suite = new PHPUnit_Framework_TestSuite('PHPUnit');
$suite->addTest(Framework_AllTests::suite());
// ...
return $suite;
}
}
?>
例 7.2: Framework_AllTests クラス
<?php
require_once 'PHPUnit/Framework.php';
require_once 'Framework/AssertTest.php';
// ...
class Framework_AllTests
{
public static function suite()
{
$suite = new PHPUnit_Framework_TestSuite('PHPUnit Framework');
$suite->addTestSuite('Framework_AssertTest');
// ...
return $suite;
}
}
?>
Framework_AssertTest クラスは、 基底クラス PHPUnit_Framework_TestCase を継承した標準的なテストケースクラスです。
phpunit AllTests を Tests ディレクトリで実行すると、すべてのテストを実行します。
phpunit Framework_AllTests AllTests.php を Tests/Framework ディレクトリで実行すると、 PHPUnit_Framework_* クラスのテストのみを実行します。
phpunit Framework_AssertTest AssertTest.php を Tests/Framework ディレクトリで実行すると、 PHPUnit_Framework_Assert クラスのテストのみを実行します。
phpunit --filter testFail Framework_AssertTest AssertTest.php を Tests/Framework ディレクトリで実行すると、 Framework_AssertTest クラスの testFail という名前のテストのみを実行します。
PHPUnit_Framework_TestSuite クラスには、 ふたつのテンプレートメソッド setUp() および tearDown() が存在します。 これらはそれぞれ、テストスイートの最初のテストの実行前と テストスイートの最後のテストの実行後にコールされます。
例 7.3: MySuite クラス
<?php
require_once 'MyTest.php';
class MySuite extends PHPUnit_Framework_TestSuite
{
public static function suite()
{
return new MySuite('MyTest');
}
protected function setUp()
{
print "\nMySuite::setUp()";
}
protected function tearDown()
{
print "\nMySuite::tearDown()";
}
}
?>
例 7.3 のテストスイート MySuite に追加されたテストケースクラス MyTest には、ふたつのテストメソッド testOne() と testTwo() のほかに setUp() メソッドと tearDown() メソッドが定義されているものとします。 この出力を見れば、これら 8 つのメソッドがどの順にコールされるのかがわかります。
MySuite::setUp() MyTest::setUp() MyTest::testOne() MyTest::tearDown() MyTest::setUp() MyTest::testTwo() MyTest::tearDown() MySuite::tearDown()
PHPUnit_Framework_TestSuite クラスの setUp() メソッドで $this->sharedFixture に保存した変数は、 テストスイートオブジェクトに登録したすべてのテストから $this->sharedFixture でアクセスできます (「Fixture の共有」 を参照ください)。
TestSuite の setUp() および tearDown() メソッドは、 (たとえばフィルタリングなどの結果として) テストスイート内のテストが実行されなかった場合でもコールされることに注意しましょう。
| Prev | Next |
Copyright © 2005-2011 Sebastian Bergmann.