Zend FrameworkとPHPUnitを使用したテストによる開発

最後の数日間をZend Frameworkのドキュメントの研究に費やした後、このWebアプリケーションフレームワークの最新バージョンに追加された新しい機能に驚きました。

私の最初の考えは、PHPテクノロジーの成長速度を実現することでした。

私の意見では、Zend FrameworkとPHPUnitを簡単に共有できることは、最も重要な成果の1つです。





PHPUnitを使用して、それがどれほど強力で、カスタマイズ可能で、簡単であるかを理解するのに十分な作業を既に行っています。

ただし、このツールを使用すると( テストフレームワークのxUnitファミリーに属します )、最も注目すべきことは、Zend FrameworkがPHPUnitと完全に連携する準備ができていることです(私の意見では、この意思により、PHPプロジェクトにZend Frameworkを選択できますが、これは別の投稿のトピックです) ..)。



PHPUnitについて知っていることは次のとおりです。PHPクラスをモジュールでテストするだけでなく、テスト間の依存関係作成しdataProviders使用して入力テストパラメーターのサンプルサイズを増やし、 例外エラーをテストできます。



さらに、PHPUnitを使用すると、 テストの整理データベーステストの提供 、ソースコードをカバーするための二重テストの実行、さらにクイックドキュメントの作成を行うことができます

結論として、PHPUnitはSelenium、Apache Ant、Apache Maven、Phing、Atlassian Bamboo、CruiseControlおよびその他の環境と連携して非常にうまく機能することに注意してください。



PHPUnitドキュメントのみを参照でき、記事のメイントピックに戻ることができます。



Zend Frameworkプロジェクトのディレクトリ構造によると、Zend Frameworkの作成者は常にテスト手法による開発に多大な注意を払ってきたことが明らかになっています。 公式文書、参考資料、文献では、プロジェクトの全体構造におけるテストのカタログの場所が強調されています。 PHP開発の Zendの 方法 について話すことができます。

より詳細な調査では、Zend_Testパッケージには、PHPUnitから継承されたZend_Test_PHPUnitクラスとZend_Test_PHPUnit_Dbクラスがあります。



Zend_Test_PHPUnitは、フレームワークのMVCクラスをテストするために使用できるクラスを提供します。

最も典型的なケースでは、コントローラーをテストするためのクラスはZend_Test_PHPUnit_ControllerTestCaseの子孫になります。

以下は、コントローラーをテストするためのクラスの例です。



class UserControllerTest extends Zend_Test_PHPUnit_ControllerTestCase<br>{<br> public function setUp()<br> {<br> $ this ->bootstrap = array($ this , 'appBootstrap' );<br> parent::setUp();<br> }<br><br> public function appBootstrap()<br> {<br> $ this ->frontController<br> ->registerPlugin( new Bugapp_Plugin_Initialize( 'development' ));<br> }<br><br> public function testCallWithoutActionShouldPullFromIndexAction()<br> {<br> $ this ->dispatch( '/user' );<br> $ this ->assertController( 'user' );<br> $ this ->assertAction( 'index' );<br> }<br><br> public function testIndexActionShouldContainLoginForm()<br> {<br> $ this ->dispatch( '/user' );<br> $ this ->assertAction( 'index' );<br> $ this ->assertQueryCount( 'form#loginForm' , 1);<br> }<br><br> public function testValidLoginShouldGoToProfilePage()<br> {<br> $ this ->request->setMethod( 'POST' )<br> ->setPost(array(<br> 'username' => 'foobar' ,<br> 'password' => 'foobar' <br> ));<br> $ this ->dispatch( '/user/login' );<br> $ this ->assertRedirectTo( '/user/view' );<br><br> $ this ->resetRequest()<br> ->resetResponse();<br><br> $ this ->request->setMethod( 'GET' )<br> ->setPost(array());<br> $ this ->dispatch( '/user/view' );<br> $ this ->assertRoute( 'default' );<br> $ this ->assertModule( 'default' );<br> $ this ->assertController( 'user' );<br> $ this ->assertAction( 'view' );<br> $ this ->assertNotRedirect();<br> $ this ->assertQuery( 'dl' );<br> $ this ->assertQueryContentContains( 'h2' , 'User: foobar' );<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .





Zend_Test_PHPUnit_Dbは 、PHPUnitデータベース拡張を継承します。

データベースのテストの作成を簡単にします。

以下はテストです。



class BugsTest extends Zend_Test_PHPUnit_DatabaseTestCase<br>{<br> private $_connectionMock;<br><br> /** <br> * . <br> * <br> * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection <br> */ <br> protected function getConnection()<br> {<br> if ($ this ->_connectionMock == null ) {<br> $connection = Zend_Db::factory(...);<br> $ this ->_connectionMock = $ this ->createZendDbConnection(<br> $connection, 'zfunittests' <br> );<br> Zend_Db_Table_Abstract::setDefaultAdapter($connection);<br> }<br> return $ this ->_connectionMock;<br> }<br><br> /** <br> * @return PHPUnit_Extensions_Database_DataSet_IDataSet <br> */ <br> protected function getDataSet()<br> {<br> return $ this ->createFlatXmlDataSet(<br> dirname(__FILE__) . '/_files/bugsSeed.xml' <br> );<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .





アプリケーションがほぼ完成したら、機能テストを実施するのが適切です。

PHPUnitをサポートするZend Frameworkとともに、Selenium IDEを使用できます。

エンドユーザーの動作を模倣するテストがあり、使いやすさ、セキュリティ、およびパフォーマンスをテストするように設計されています。



通常のSeleniumテストはPHPUnit_Extensions_SeleniumTestCaseを継承し、次のようになります。



<?php<br>require_once 'PHPUnit/Extensions/SeleniumTestCase.php' ;<br> class seleniumExampleTest extends PHPUnit_Extensions_SeleniumTestCase<br>{<br> protected function setUp()<br> {<br> $ this ->setBrowser( '*firefox' );<br> $ this ->setBrowserUrl( 'http://www.google.com.au/' );<br> }<br> function testMyTestCase()<br> {<br> $ this ->open( 'http://www.google.com.au/' );<br> $ this ->type( 'q' , 'zend framework' );<br> $ this ->click( 'btnG' );<br> $ this ->waitForPageToLoad( '30000' );<br> try {<br> $ this ->assertTrue($ this ->isTextPresent( 'framework.zend.com/' ));<br> } catch (PHPUnit_Framework_AssertionFailedError $e) {<br> array_push($ this ->verificationErrors, $e->toString());<br> }<br> }<br>} <br><br> * This source code was highlighted with Source Code Highlighter .





この記事は、すべてのテスト機能のごく一部の影響を受けません。

この記事の目的は、Zendフレームワークがその環境に非常に密接に統合されていることと、

この統合により、PHPユーザーのグループは実際にテクノロジーを使用することができます。

「テストによる開発」(TDD)。

これらの機能を使用して、製品の品質を向上させます。




All Articles