4.7.8 コンポーネントのテスト
「Transporter」モデルを利用し、他のコントローラに機能を提供する「TransporterComponent」コンポーネントが存在するとします。その場合、次の四つのファイルを使います。
- app/controllers/components/transporter.php の 「Transporter」コンポーネント。
- app/models/transporter.php の「Transporter」モデル。
- app/tests/fixtures/transporter_fixture.php の「TransporterTestFixture」フィクスチャ。
- app/tests/cases/transporter.test.php のテスト用コード。
4.7.8.1 コンポーネントの初期化
CakePHP では、コンポーネントからモデルを直接操作できないようになっているため(参照:/ja/view/62/components)、モデルのデータにアクセスするためのコントローラが必要です。
コンポーネントの startup() 関数を次のようにします。
public function startup(&$controller){
$this->Transporter = $controller->Transporter;
}
public function startup(&$controller){$this->Transporter = $controller->Transporter;}
次に、ごく簡単な仮のクラスを作成します。
class FakeTransporterController {} class FakeTransporterController {}
そしてその中に次のように値を設定していきます。
$this->TransporterComponentTest = new TransporterComponent(); $controller = new FakeTransporterController(); $controller->Transporter = new TransporterTest(); $this->TransporterComponentTest->startup(&$controller);
$this->TransporterComponentTest = new TransporterComponent();$controller = new FakeTransporterController();$controller->Transporter = new TransporterTest();$this->TransporterComponentTest->startup(&$controller);
このセクションへのコメントを見る
4.7.8.2 テスト用のメソッドの作成
CakeTestCase を拡張したクラスを作成し、テストを書いていきましょう。
class TransporterTestCase extends CakeTestCase {
var $fixtures = array('transporter');
function testGetTransporter() {
$this->TransporterComponentTest = new TransporterComponent();
$controller = new FakeTransporterController();
$controller->Transporter = new TransporterTest();
$this->TransporterComponentTest->startup(&$controller);
$result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Sweden");
$this->assertEqual($result, 1, "SP is best for 1xxxx-5xxxx");
$result = $this->TransporterComponentTest->getTransporter("41234", "Sweden", "44321", "Sweden");
$this->assertEqual($result, 2, "WSTS is best for 41xxx-44xxx");
$result = $this->TransporterComponentTest->getTransporter("41001", "Sweden", "41870", "Sweden");
$this->assertEqual($result, 3, "GL is best for 410xx-419xx");
$result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Norway");
$this->assertEqual($result, 0, "Noone can service Norway");
}
}
class TransporterTestCase extends CakeTestCase {var $fixtures = array('transporter');function testGetTransporter() {$this->TransporterComponentTest = new TransporterComponent();$controller = new FakeTransporterController();$controller->Transporter = new TransporterTest();$this->TransporterComponentTest->startup(&$controller);$result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Sweden");$this->assertEqual($result, 1, "SP is best for 1xxxx-5xxxx");$result = $this->TransporterComponentTest->getTransporter("41234", "Sweden", "44321", "Sweden");$this->assertEqual($result, 2, "WSTS is best for 41xxx-44xxx");$result = $this->TransporterComponentTest->getTransporter("41001", "Sweden", "41870", "Sweden");$this->assertEqual($result, 3, "GL is best for 410xx-419xx");$result = $this->TransporterComponentTest->getTransporter("12345", "Sweden", "54321", "Norway");$this->assertEqual($result, 0, "Noone can service Norway");}}
