ãã®èšäºã®ç®çã¯ããã¹ãã«ç²ŸéããŠããªã人ã
ã«ãæå°éã®æ°Žãšãã·ã¢èªã§ãã¹ãŠã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(' ');
ãåç¥ã®ãšããïŒæ©æã«èµ·åããŸãã ãã¹ãã倱æããããšã瀺ãã¡ãã»ãŒãžã衚瀺ãããŸãã ãªããªã 圌ã¯ãã¡ã€ã³ããŒãžãéããµã€ããå®å
šã«èªèããŠããŸããã 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
æé ãèŠãtests/_bootstrap.php
ãæ¬¡ã®å®æ°ã远å ãtests/_bootstrap.php
ïŒ defined('YII_ENV') or define('YII_ENV', 'test');
ã ãã¡ã€ã«ããªãå Žåã¯ãã«ãŒãcodeception.yml
settings.bootstrapãäœæããŠè¿œå ããŸãïŒ_bootstrap.phpã ãã®ãããªãã¡ã€ã«ã¯ããã¹ãã§ãã¹ãŠã®ãã©ã«ããŒã«å
¥ããå¿
èŠããããŸãã å¿ãããšãCodeceptionããããæãåºãããŸãã- yiiã¢ããªã±ãŒã·ã§ã³ã®configãã©ã«ããŒã§ã
main.php
暪ã«test.php
å
¥ãtest.php
ãããã¯ããã¥ã¢ã«ããèšå
¥ããŸã - å°éçãªæ¹æ³ã§ãã¢ãžã¥ãŒã«ããã³ããŒãèªèããããã¡ã€ã«ã·ã¹ãã å
ã®å Žæãçè§£ããã®ã«åé¡ãããããšãçºèŠããŸããã ãã®ããã
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 { protected $tester; 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);
$ 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ã€ã®èšäºã§ã¯ãªãããšãçè§£ããŠããŸãã åããã¹ããã©ã¯ãã£ã¹ã¯èšããŸã§ããªãããããã¯ç¬èªã®ã³ãŒã³ã§ãã£ã±ãã«ãªãããäºåã«èªãããšãã§ããŸãã
ããã§ã¯ããã®åœ¢åŒã§å§ããŠãäœãèµ·ãããèŠãŠã¿ãŸãããã
ç®çã®èŽè¡ãèŠã€ãã£ãå Žåãã¢ãã¯ãªããžã§ã¯ãããã£ã¯ã¹ãã£ããã³ãã䜿çšãããã¹ãããŒã¿ããŒã¹ãããã³ãã®æ¹åã§äœ¿çšãããããå€ãã®è峿·±ãããšã«ã€ããŠééããªã話ããŸãã
䟿å©ãªãªã³ã¯ã衚瀺