XUnitでは、テストの前準備はPHPUnit_Framework_TestCaseクラスのsetUp()メソッドで行い、
後処理はtearDown()メソッドで行います。
PHPUnit_Framework_TestCase {
protected function setUp();
protected function tearDown();
}
<?php
require_once 'PHPUnit/Framework.php';
class DBTest extends PHPUnit_Framework_TestCase {
private $con;
/**
* SQLiteのsample.dbファイルのDBに接続
*/
protected function setUp() {
$this->con = new PDO('sqlite:sample.db');
}
/**
* $conを使ったテストメソッド
*/
public function test1() {
$con = $this->con;
$stmt = $con->query('SELECT * FROM exampleTable');
if ($stmt->fetch() === FALSE) {
$this->fail();
}
}
/**
* $conを使ったテストメソッド
*/
public function test2() {
$con = $this->con;
$stmt = $con->query('エラーになるSQL文');
$this->assertEquals(FALSE, $stmt);
}
/**
* DBを切断
*/
protected function tearDown() {
unset($this->con);
}
}
?>
例えば、DBへの接続が必要なテストの場合、DBへの接続処理をsetUp()メソッドに、 切断処理をtearDown()メソッドに記述するといった使い方ができます。
setUp()メソッドとtearDown()メソッドは、テストケース毎に実行されます。
上記サンプルでは、テスト用のメソッドが実行されるたびにsetUp()メソッドとtearDown()メソッドが呼ばれますが、
わざわざテスト1つ1つでDB接続をしなおす必要もありません。
そこで、PHPUnit_Framework_TestCaseを継承する代わりに、PHPUnit_Framework_TestSuiteクラスを継承することで、
setUp()メソッドとtearDown()メソッドは、テストケース毎に実行されるのではなく、
setUp()メソッドはすべてのテストケースの最初に1度だけ実行され、
tearDown()メソッドはすべてのテストケースの最後に1度だけ実行されるようになります。
はずなのですが・・・テストケース毎に呼ばれています。
<?php
require_once 'PHPUnit/Framework.php';
class DBTest extends PHPUnit_Framework_TestSuite {
/**
* SQLiteのsample.dbファイルのDBに接続
*/
protected function setUp() {
$this->sharedFixture = new PDO('sqlite:sample.db');
echo 'setUp()' . "\n";
}
/**
* $conを使ったテストメソッド
*/
public function test1() {
$con = $this->sharedFixture;
$stmt = $con->query('SELECT * FROM exampleTable');
if ($stmt->fetch() === FALSE) {
$this->fail();
}
}
/**
* $conを使ったテストメソッド
*/
public function test2() {
$con = $this->sharedFixture;
$stmt = $con->query('エラーになるSQL文');
$this->assertEquals(FALSE, $stmt);
}
/**
* DBを切断
*/
protected function tearDown() {
unset($this->sharedFixture);
echo 'tearDown()' . "\n";
}
}
?>