Zend_Test および一般的に PHP を使用して PHPUnit テストを作成する方法を知りたいです。
6 に答える
Zend_Testを使用して、すべてのコントローラーを完全にテストしています。ブートストラップファイルを設定するだけでよいので、設定は非常に簡単です(ブートストラップファイル自体はフロントコントローラーをディスパッチしないでください!)。私の基本的なテストケースクラスは次のようになります。
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 に「単体テストの技術の紹介」があります。
この記事はとても役に立ちました。また、 Zend_Testのドキュメントも大いに役立ちました。これら 2 つのリソースの助けを借りて、Zend FrameworkのQuickStart チュートリアルに単体テストをうまく実装し、いくつかのテストを作成することができました。
ZF 1.10 を使用して、いくつかのブートストラップ コードを 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 などを使用してアプリに対するテストを作成しました。最大の部分は、テスト セットアップで十分なブートストラップ コードを取得することです。