PHP コードと MySQL データベース間の相互作用をテストしている場合は、単体テストではなく統合テストを実行しています。
Enhance PHP フレームワークとの統合テストの例を次に示します。これは、Tenant オブジェクトを保存および取得するリポジトリ クラスをテストします。
事前に入力されたデータベースに対して実行する代わりに、完全に空のデータベースで実行し、単純なテーブル ヘルパーを使用してテーブルを作成および破棄します。これにより、テストデータベースで特定のデータが正しい状態にあるという依存関係がなくなります。これは、維持するのが困難です。
<?php
class TenantRepositoryTestFixture extends EnhanceTestFixture {
private $Target;
public function SetUp() {
$tables = new TableHelper();
$tables->CreateTenantTable();
$this->Target = Enhance::GetCodeCoverageWrapper('TenantRepository');
}
public function TearDown() {
$tables = new TableHelper();
$tables->DropTenantTable();
}
public function SaveWithNewTenantExpectSavedTest() {
$tenant = new Tenant();
$tenant->Name = 'test';
$saved = $this->Target->Save($tenant);
$result = $this->Target->GetById($saved->Id);
Assert::AreNotIdentical(0, $result->Id);
Assert::AreIdentical($tenant->Name, $result->Name);
}
public function SaveWithExistingTenantExpectSavedTest() {
$tenant = new Tenant();
$tenant->Name = 'test';
$saved = $this->Target->Save($tenant);
$saved->Name = 'changed';
$saved = $this->Target->Save($saved);
$result = $this->Target->GetById($saved->Id);
Assert::AreIdentical($saved->Id, $result->Id);
Assert::AreIdentical($saved->Name, $result->Name);
}
}
?>