Zend_Testを使用して、一般的にはPHPを使用してPHPUnitテストを作成する方法を知りたいです。
Zend_Testを使用して、すべてのコントローラーを完全にテストしています。 bootstrapファイルをセットアップするだけなので、セットアップは非常に簡単です(bootstrapファイル自体はフロントコントローラーをディスパッチしないでください!)基本テストケースクラスは次のようになります。
_abstract class Controller_TestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
protected function setUp()
{
$this->bootstrap=array($this, 'appBootstrap');
Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_NonPersistent());
parent::setUp();
}
protected function tearDown()
{
Zend_Auth::getInstance()->clearIdentity();
}
protected function appBootstrap()
{
Application::setup();
}
}
_
ここで、Application::setup();
は、実際のアプリケーションもセットアップするすべてのセットアップタスクを実行します。簡単なテストは次のようになります。
_class Controller_IndexControllerTest extends Controller_TestCase
{
public function testShowist()
{
$this->dispatch('/');
$this->assertController('index');
$this->assertAction('list');
$this->assertQueryContentContains('ul li a', 'Test String');
}
}
_
それで全部です...
PHPUnitをカバーするZend Developer Zoneに " Introduction to the Art of Unit Testing "があります。
私は this 記事がとても役に立ったと感じました。また、 Zend_Test のドキュメントは非常に役に立ちました。これら2つのリソースを利用して、Zend Frameworkの QuickStart tutorial でユニットテストを正常に実装し、いくつかのテストを作成することができました。
ZF 1.10を使用して、いくつかのbootstrapコードをtests/bootstrap.phpに挿入します(基本的には(public/index.php)にあるもの)、$ application-> bootstrap()まで)。
その後、私は使用してテストを実行することができます
phpunit --bootstrap ../bootstrap.php PersonControllerTest.php
さらに、データベーストランザクションを使用している場合は、単体テストを介して行われるすべてのトランザクションを削除することをお勧めします。そうしないと、データベースがすべて混乱します。
などの設定
public function setUp() {
YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(true);
YOUR_ZEND_DB_INSTANCE::getInstance()->query("BEGIN");
YOUR_ZEND_DB_INSTANCE::getInstance()->getCache()->clear();
// Manually Start a Doctrine Transaction so we can roll it back
Doctrine_Manager::connection()->beginTransaction();
}
分解時にロールバックするだけです
public function tearDown() {
// Rollback Doctrine Transactions
while (Doctrine_Manager::connection()->getTransactionLevel() > 0) {
Doctrine_Manager::connection()->rollback();
}
Doctrine_Manager::connection()->clear();
YOUR_ZEND_DB_INSTANCE::getInstance()->query("ROLLBACK");
while (YOUR_ZEND_DB_INSTANCE::getInstance()->getTransactionDepth() > 0) {
YOUR_ZEND_DB_INSTANCE::getInstance()->rollback();
}
YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(false);
}
私はZend_Testを使用していませんが、Zend_MVCなどを使用してアプリに対するテストを作成しました。最大の部分は、テスト設定で十分なbootstrapコードを取得することです。