ダミヌのCodeceptionを䜿甚したテスト3皮類のテスト

この蚘事の目的は、テストに粟通しおいない人々に、最小限の氎ずロシア語ですべおを1か所で収集しお、本圓に迅速にテストを開始する方法を瀺すこずです。 非垞に原始的なものにしおください。 すでにTDD、SOLID、およびその他の原則に埓っお生掻しおいる人にずっおは、あたり面癜くないかもしれたせん。 しかし、最埌たで読んだ埌、誰でもテストの䞖界に自信を持っお最初の䞀歩を螏み出すこずができたす。


受け入れ、機胜、単䜓テストたたは単䜓テストを怜蚎したす。



たた、この蚘事は、実際には「Codeception」ずいうタむトルの倚くの蚘事が1぀の受理テストにすぎないずいう事実によっお促されたした。
PS私はプロではなく、すべおを間違える可胜性があるこずをすぐに譊告したす。

ComposerずCodeceptionのむンストヌル


フレヌズに困惑しおいる堎合


$ composer require "codeception/codeception:*" $ alias cept="./vendor/bin/codecept" 

、そしおカットの䞋で私はより詳现に教えたす。 たたは、先に進みたしょう。

開始するには、優れたComposerツヌルが必芁です。 ほずんどのプロゞェクトでは、すでにむンストヌルされおいたす。 しかし、それをむンストヌルするこずも問題ではありたせん。 すべおのオプションは公匏ペヌゞにリストされおいたす https ://getcomposer.org/download/最も䞀般的で簡単な方法は、ペヌゞをスクロヌルダりンしお、* .pharファむルをプロゞェクトのルヌトにダりンロヌドするこずです。


ベストプラクティスは、そうするこずが悪いこずを教えおくれたす。 / etc / binに配眮し、実行暩を䞎え、名前をcomposerに倉曎する必芁がありたす。 蚘事を最埌たで読んだら、圌らの話を聞いおください。


Composerを構成する2番目のステップ、および非垞によくある回答、Composerが砎損した堎合の察凊方法FXPプラグむンを曎新/むンストヌルしたす。 https://packagist.org/packages/fxp/composer-asset-pluginで「存続」したす。倚くの堎合、次のコマンドでむンストヌルされたす 。
$ php composer.phar global require "fxp/composer-asset-plugin:~1.4.2"
この蚘事を読むずきにサむトに衚瀺されるバヌゞョンを入力する必芁があるこずに泚意しおください。


䜜業を開始する前の最終セットアップは、Composerを䜿甚しおCodeceptionを蚭定するこずです。
$ php composer.phar require "codeception/codeception:*"


その埌、Codeceptionの実行可胜ファむルは、Linuxの堎合は./vendor/bin/codeceptサブディレクトリに、Windowsの堎合は./vendor/bin/codecept.batにありたす。 長い間、各起動の前にこれを入力しおください。 したがっお、削枛を行いたす。
Linuxの堎合 $ alias cept="./vendor/bin/codecept"
Windowsの堎合、プロゞェクトのルヌトテストの実行元で、新しいbatファむルを䜜成したすcept.bat


 @echo off @setlocal set CODECEPT_PATH=vendor/bin/ "%CODECEPT_PATH%codecept.bat" %* @endlocal 

その埌、コン゜ヌルのceptコマンドはCodeceptionによっおヘルプペヌゞを返したす。 たた、任意のディレクトリからcept.batを実行する堎合は、PATHディレクティブに泚目しおください。


このテヌマに関するいく぀かのヒント
コンポヌザヌからパッケヌゞを削陀する $ php composer.phar remove codeception/codeception
問題が発生した堎合 "Fatal error: Allowed memory size of 12345678 bytes exhausted" Composerは、わずかに倉曎された呌び出しが曞き蟌たれるリンクをすぐに衚瀺したす。 $ php -d memory_limit=-1 composer.phar {_}


最初のテストを䜜成したすAcceptanceたたはAcceptance


これで、最初のテストから䞀歩離れたした。 私たちのサむトがメむンペヌゞずAboutペヌゞを開くこずを確認したす。 正しい応答コヌド「200」を返し、キヌワヌドが含たれおいるこず。


実際-これは受け入れテストの本質です。プログラミングから遠く離れた人がアクセスできるものをチェックするこずペヌゞのコンテンツを衚瀺する、ログむンを詊みるなど。


$ cept bootstrap最初のむンストヌル埌、1回限りの初期化を行いたす
$ cept generate:cept acceptance SmokeTest最初のテストケヌスを䜜成したす


テスト/受け入れ/ SmokeTestCept.phpを開き、新しいAcceptanceTesterずwantoを2行に远加したす 。 出力では、以䞋を取埗する必芁がありたす。


 $I = new AcceptanceTester($scenario); $I->wantTo('Check that MainPage and About are work'); $I->amOnPage('/'); $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); $I->see(' '); // !       $I->amOnPage('/about'); $I->seeResponseCodeIs(\Codeception\Util\HttpCode::OK); $I->see(' '); // !       about 

ご存知のずおり早期に起動したす。 テストが倱敗したこずを瀺すメッセヌゞが衚瀺されたす。 なぜなら 圌は、メむンペヌゞを開くサむトを完党に認識しおいたせん。 tests/acceptance.suite.ymlファむルのmodules.config.PhpBrowser.urlセクションを線集したす。 たずえば、私はそこに着きたした url: http://rh.dev/


たた、テストコヌドでは、ダビングがすぐに目を匕きたす。 tests/_support/AcceptanceTester.phpクラスに新しいメ゜ッドを远加するこずでリファクタリングできたす。 たたは、それを継承しお、独自に䜜成し、そこにメ゜ッドを远加したす。 しかし、これはテストに関する別の䌚話ではありたせん。


そのため、次のコマンドをクリックしたす。


$ cept build再構築には垞に再構築が必芁です
$ cept run acceptance実行テストを実行したす


次のメッセヌゞが衚瀺されたす OK1テスト、4アサヌション


実際に-それだけです 最初のテストを䜜成したした。これにより、サむト党䜓のペヌゞの劥圓性を確認できたす。 これらは、これらのペヌゞが倚数あり、ボスが毎回より速く回転したい堎合に特に䟿利です。 サむトで䜕かが壊れたこずをscるのを忘れないでください。


将来的には、フォヌム、ajax、REST、SeleniumなどのJavaScriptをチェックするこずもできたす。


最初のテストの䜜成機胜的たたは機胜的


すぐにドキュメントからの重芁な匕甚「フレヌムワヌクを䜿甚しない堎合、機胜テストを曞くこずは実質的に意味がありたせん。」
この皮のテストには、サポヌトされおいるCodeceptionのフレヌムワヌクが必芁ですYii1 / 2、ZF、Symfonyなど。 これは機胜テストにのみ適甚されたす。
残念ながら、サポヌトされおいるもののリストを含む特定のリンクを芋぀けるこずができたせんでした。

機胜テストは、受け入れテストに少し䌌おいたす。 ただし、埌者ずは異なり、Webサヌバヌを起動する必芁はありたせん。リク゚スト倉数の゚ミュレヌションget、postを䜿甚しおフレヌムワヌクを呌び出したす。
公匏ドキュメントでは、機胜テストを䜿甚しおアプリケヌションの䞍安定郚分をテストし、受け入れテストを䜿甚しお安定郚分をテストするこずを掚奚しおいたす。 これは、機胜テストではWebサヌバヌを䜿甚する必芁がないため、より詳现なデバッグ出力を提䟛できる堎合があるためです。


たず最初に行う必芁があるのは、 tests/functional.suite.yml蚭定ファむルを線集し、「add a framework module here」ずいうフレヌズではなく、フレヌムワヌクのモゞュヌルを瀺すこずです。 そしお、蚭定のすべおの埮劙な点-公匏ドキュメントを読む必芁がありたす。


非テンプレヌトYii2の䟋を瀺したすBasicたたはAdvancedテンプレヌトをむンストヌルしおいる堎合、このペヌゞの䞊郚にそのようなオプションの説明がありたす http : //codeception.com/for/yii#Manual-Setup--Configuration


手順を芋る
  1. tests/_bootstrap.php 、次の定数を远加しtests/_bootstrap.php  defined('YII_ENV') or define('YII_ENV', 'test'); 。 ファむルがない堎合は、ルヌトcodeception.yml settings.bootstrapを䜜成しお远加したす_bootstrap.php。 そのようなファむルは、テストですべおのフォルダヌに入れる必芁がありたす。 忘れるず、Codeceptionがこれを思い出させたす。
  2. yiiアプリケヌションのconfigフォルダヌで、 main.php暪にtest.php入れtest.php 。これはマニュアルから蚘入したす
  3. 専門的な方法で、モゞュヌルがベンダヌを認識せず、ファむルシステム内の堎所を理解するのに問題があるこずを発芋したした。 そのため、 test.phpを远加しお、さらに2、3行远加したした。
     require_once(__DIR__ . '/../../../vendor/autoload.php'); require_once(__DIR__ . '/../../../vendor/yiisoft/yii2/Yii.php'); require_once(__DIR__ . '/../../../common/config/bootstrap.php'); // @approot -   . +        $_SERVER['SCRIPT_FILENAME'] = realpath(Yii::getAlias('@approot/web/index.php')); $_SERVER['SCRIPT_NAME'] = '/'.basename($_SERVER['SCRIPT_FILENAME']); 

$ cept generate:cept functional myFirstFunctional最初のテストスクリプトを䜜成したす
䜜成されたテストtests/functional/myFirstFunctionalCept.php 、以前のテストファむルず同様に蚘入されたす。 最初の行に1぀だけ違いがありたす
$I = new FunctionalTester($scenario);


さらに、䞊蚘の資料に぀いお


$ cept build再構築には垞に再構築が必芁です
$ cept run functional実行テストを実行したす


次のメッセヌゞが衚瀺されたす OK1テスト、4アサヌション


最初のテストの䜜成単䜓テストたたは単䜓テット


前のテストでアプリケヌション党䜓を芋た堎合゚ントリポむントから出口ポむントたで。 それはナニットテストです-それらはすべおを棚に眮き、すべおのブリック、別名モゞュヌル、アプリケヌションをテストするこずを可胜にしたす。


テストする内容ず深さ-ハブには倚くの蚘事がありたす 堎合によっおは、すべおのメ゜ッドずクラスを完党にテストするこずが必須であるこずを教えおくれたす。 他では、䌚話はわずかに異なりたす。 たずえば、この蚘事は私の目を匕きたした 100パヌセントのコヌドカバレッゞの悲劇


ActiveRecordパタヌンに埓っお動䜜するクラスをテストしたす。配列からデヌタを読み蟌み、怜蚌を実行したす。 その埌、必須フィヌルドが远加され、どこでも通垞のように、誰もがそれを忘れたす。テストはすぐに異議を衚明したす。


第2段階では、ヘルパヌの1人をテストしたす。 このアむデアは有甚ずいうよりも瀺唆的なものです。


始たりはすでにおなじみです


tests/unit.suite.ymlフレヌムワヌクに応じお線集したす䜿甚する堎合。
$ cept build構成ファむルに倉曎を加えた埌、垞に再構築が必芁です。
$ cept generate:test unit SmokeUnit将来のテスト甚にダミヌを䜜成したす。


私のテストの完党なリスト
 <?php namespace tests\unit; use common\helpers\JsonRhHelper; use frontend\modules\wot\models\WotMonitoringClan; class SmokeUnitTest extends \Codeception\Test\Unit { /** * @var \UnitTester */ protected $tester; /** * @var array -       */ protected $clanFixture = [ 'WotMonitoringClan' => [ 'clan_id' => 1, 'status' => '1', 'name' => 'DNO', 'tag' => ' ' ] ]; protected function _before() { } protected function _after() { } /** * ,       */ public function testCheckClanAR() { $clan = new WotMonitoringClan(); $clan->load($this->clanFixture); // -     $this->assertTrue($clan->validate()); //    $fullClanTag = '[' . $clan->tag . ']'; $this->assertTrue($clan->fullClanTag === $fullClanTag); // ,   ,   $clan->clan_id = null; $this->assertFalse($clan->validate()); } /** * ,   JSONa      */ public function testStaticHelper() { //   $expectedArray = ['success' => 'myTest']; $respArray = JsonRhHelper::success('myTest', false); $this->assertTrue($expectedArray === $respArray); //    $expectedArray = [ 'error' => [ 'message' => 'myTest', 'id' => 13255 ] ]; $respArray = JsonRhHelper::error('myTest', 13255, false); $this->assertTrue($expectedArray === $respArray); } } 

$ cept run unit実行テストを実行したす。 OK2぀のテスト、5぀のアサヌションを参照しおください


私は少し説明したす
$this->assertTrue($clan->validate()); -名前が瀺すように、倉数たたはメ゜ッドの結果に論理的なTRUEが期埅されたす。 カりンタヌりェむト $this->assertFalse()
$this->assertEquals(1, count($myArray)); -2぀のパラメヌタヌが等しいこずを期埅する


぀たり いく぀かのチェックで基本的なこずができたす。 いわば、自分でストロヌを眮いおください。 䜙暇には、チェックの残りの衚珟に぀いお読んでください  http : //www.phpunit.de/manual/3.4/en/api.html#api.assert


ずころで これですべおのテストが䜜成され、アプリケヌションは新しい方法で動䜜を開始する準備ができたした。 ロヌルアりトする前にテストが既に1回実行される堎合。 最初に蚀及しなかったこずをお䌝えしたす。 runパラメヌタヌの埌に、テストの皮類を省略できたす。 その埌、すべおのタむプのテストが順番に実行されたす $ cept run

結論ずしお


もちろん、この蚘事ではすべおが単玔化され、衚面的に曞かれおいたす。 しかし、あなた自身は、このトピックが1぀の蚘事ではないこずを理解しおいたす。 同じベストプラクティスは蚀うたでもなく、それらは独自のコヌンでいっぱいになるか、事前に読むこずができたす。


それでは、この圢匏で始めお、䜕が起こるか芋おみたしょう。


目的の聎衆が芋぀かった堎合、モックオブゞェクト、フィクスチャ、ダンプを䜿甚したテストデヌタベヌス、およびこの方向で䜿甚されるより倚くの興味深いこずに぀いお間違いなく話したす。




Source: https://habr.com/ru/post/J329418/


All Articles