ã¯ããã«
ããã«ã¡ã¯ï¼ã¹ã¿ã¤ã«ã»ã¨ãã¸ã® ike ã§ãã éå»ä½åãã«æ¸¡ã£ã¦è¨äºãé£è¼ãã¦ãã¾ããããã¢ãã³éçº#2ã¾ã§ãå·çãã¦ãã SHISO ããããããã³ãã¹ãåãã¦ãä»åã¯å®è£ è ã¨ãã¦ããã¸ã§ã¯ãã«åç»ããè¦ç¹ããå·çãã¾ãï¼
å¼ç¤¾ã§ã¯ããæ¥åã·ã¹ãã ã®éçºããã¸ã§ã¯ãã«ã¦ããã¹ãé§åéçºï¼TDDï¼ã«ææ¦ãã¾ãããããããçµæçã«ã¯ãã¼ã ã¡ã³ãã¼ã®çµé¨ã®å°ãªãæ
ã®é£ããããããéä¸ã§ã¦ããããã¹ãã®å°å
¥ãæåªå
ã¨ããæ¹éã«è»¢æãããã¨ã«ãªãã¾ããã
ããã§ãTDDã«ææ¦ããçµç·¯ãææãéä¸ã§æ¹é転æãããã¨ã«ãªã£ã¦ãã¾ã£ãçç±ããã®ä¸ã§å¾ãããæ©æµã»æ°ä»ããæ¯ãè¿ã£ã¦ããã¾ãï¼
TDD ã®ææ¦ã«è³ã£ãçµç·¯
å¼ç¤¾ã§ä¿å®éçºãè¡ãªã£ã¦ãããããããã¯ãã§ã¯ãæ¹ä¿®æã«çãããã°ã®è§£æ¶ã«æéãè²»ããã¦ãã¾ãã顧客æºè¶³åº¦ã®åä¸ã«ç´æ¥ã¤ãªãããããªæ¹åã«æéãå²ããªãã¨ããåé¡ãããã¾ããã
ãã®ãããã¯ãã¯æ¥åãã¸ãã¯ãé常ã«è¤éãªã®ã«ãé¢ãããã¦ããããã¹ãããªãã£ãããã³ã¼ãè¨è¨èªä½ã綺éºã¨ã¯è¨ãé£ãã¨ããç¶æ³ã«ãªã£ã¦ãããç¡èªè¦ã§ãã°ãåãè¾¼ã¿ãããç¶æ ã«ãªã£ã¦ãã¾ã£ã¦ãã¾ãããã¾ãã仿§ã詳細ã«ç¥ã£ã¦ããã®ã䏿¡ãã®ã¡ã³ãã¼ã«éããã¦ãã¾ããæ¹ä¿®å¾ã®å使¤è¨¼ã§èæ ®æ¼ãã«ããææ»ããªã©ãããã¾ããã
ãã®çµé¨ãããæ°è¦ãããã¯ãã§ã¯ä»¥ä¸ã®ãããªTDDã®ã¡ãªããã享åãããã¨èãã¾ããã
- é»éã®å転*1ã«å«ã¾ãããªãã¡ã¯ã¿ãªã³ã°ã«ãããå¿ ç¶çã«ã³ã¼ãåè³ªãæ ä¿ããã
- èªç¶ã¨é«åéã»ä½çµåã§å¤ãã®é¨åã§æ§æãããè¨è¨ãè¡ãããã«ãªã
- å°ããªåä½ã§ãã¹ãã¨å®è£ ãç¹°ãè¿ããã¨ã§ãå®è£ æã®èªç¥è² è·ã軽æ¸ã§ãã
- éæãã¹ããã¨ãæç¢ºã«ãªã£ãç¶æ ã§å®è£ ã«åãçµããã¨ãã§ãã
- è¤éãªä»æ§ããã¹ãã³ã¼ãã¨ããå½¢ã§ç¢ºå®ã«æ®ã
ããææ¦ãã¦ã¿ã¦æããã®ã£ããã¨æ¹é転æ
ä¸è¨ã®ãããªã¡ãªããã享åããããã«TDDã«ææ¦ã¯ãã¦ã¿ããã®ã®ããã¼ã å ã«ãã¹ãå®è£ èªä½ã®çµé¨è ãå°ãªãã£ããã¨ããå®è£ å·¥æ°ã¨ã³ã¼ãã¬ãã¥ã¼å·¥æ°ãæ³å®ä»¥ä¸ã«éãã£ããã¨ãªã©ãããå¾ã ã«ããã¸ã§ã¯ãã¨ãã¦ã®ä½è£ããªããªã£ã¦ããã¾ãããããã«ããæ¬¡ç¬¬ã«ãã¹ããã¡ã¼ã¹ãã§æ¸ããã¨ãé£ãããªããTDDã®é»éã®å転ããã¾ãè¡ããªããªã£ã¦ããã¾ããã
ãããã¯ãã®ãªãªã¼ã¹æéã¨ã®å ¼ãåããããéçºææ³èªä½ã¯å¾æ¥ã¨å¤§ããå¤ããã«ã主è¦é¨åã«ã¦ããããã¹ããå°å ¥ãããã¨ãã«ç §æºãåããããã¨ã«ãªãã¾ããã
ã¦ããããã¹ãå°å ¥ã«ããæ©æµ
ã³ã¼ãã®å¯èªæ§ã»æ©è½æ¡å¼µæ§ãé«ã¾ã£ã
ã¦ããããã¹ãã®å®è£ ãè¡ãããã«ã¯ããã¹ã¿ãã«ãªã³ã¼ãã«ããå¿ è¦ããããããèªãã¨ã¯ã©ã¹ãã¢ã¸ã¥ã¼ã«ã®ç²åº¦ã®ã°ãã¤ãããªããªããé«åéã»ä½çµåãªã³ã¼ãã«ãªã£ã¦ããã¾ãããã¾ããåã¡ã½ããã«åä¸ã®è²¬åã®ã¿ãæãããããã«ãªããã¨ã§ãã³ã¼ãã®è¤éããåãé¤ããã¨ãã§ãã¾ããããããã«ãã夿´æã®å½±é¿ç¯å²ãææ¡ãããããå¾ããæ©è½ã追å ãããã¨ã容æã«ãªãã¾ããã
éè¦ãªæ¥åãã¸ãã¯ã®å¤æ´ã«æ¯ãããã¨ããªããªã£ã
æéã®å ¼ãåãããããã¹ã対象ã¯éå®ããå¿ è¦ãããã¾ããããä¾åé¢ä¿ã®ä¸å¿ã«ãªããã¡ã¤ã³ãªãã¸ã§ã¯ããã¦ã¼ã¹ã±ã¼ã¹ãåºç¯å²ã§åå©ç¨ãããã¦ã¼ãã£ãªãã£ã«é¢ãã¦ã¯å¿ é ã§ãã¹ããè¡ãããã«ãã¾ãããããã«ãã䏿 ¸é¨åã®ã³ã¼ãå質ãé«ããªããéè¦ãªæ¥åãã¸ãã¯é¨åã®å®è£ ã«å¯¾ãã¦ã®ä¸å®ãç¡ããªãã¾ããã
ãã¹ãå®è£ ãå¿ é ã¨ããç®æ
ãã¡ã¤ã³ãªãã¸ã§ã¯ã
対象ï¼Entity, ValueObject, DomainService, CollectionObject, æ¯ãèããæã¤Enum
çç±ï¼ãã¡ã¤ã³ã®æ¦å¿µãã«ã¼ã«ã表ããæ¥åãã¸ãã¯ã表ç¾ããããã®éè¦ãªé¨åã§ããããã¦ã¼ã¹ã±ã¼ã¹
対象ï¼Actions
çç±ï¼ãã¡ã¤ã³ãªãã¸ã§ã¯ãã®æä½ã®çµã¿åããã§ã¦ã¼ã¹ã±ã¼ã¹ããµã¼ãã¹ãçµã¿ç«ã¦ã層ã¨ãã¦éè¦ã§ãããçµå¹´çã«ç ©éåããããé¨åã§ããããåºç¯å²ã§åå©ç¨ãããã¦ã¼ãã£ãªãã£
対象ï¼Helpers, Packages, Traits
çç±ï¼å¤ãã®ã¯ã©ã¹ã§å¼ã³åºãããå ±éé¨åã§ãå½±é¿ç¯å²ãåºããã
ãã¹ãã³ã¼ãã®åå¨ã«ããæ°è¦åå ¥è ã®ä»æ§çè§£ãæ©ããªã£ã
ããã¸ã§ã¯ããé²ããä¸ã§ã¡ã³ãã¼ã®å¢å¡ãããã¾ãããããã¹ãã³ã¼ãã®åå¨ã«ãããæ°è¦åå ¥è ãå®è£ ã«å ¥ãããã®ä»æ§ã®èªèåããã¯ãè£è¶³ç¨åº¦ã§æ¸ãããã«ãªãã¾ããã
ãã¹ãã³ã¼ããèªã¿ããããæå³ãææ¡ããããããããã«å®æ½ããåãçµã¿ã®ä¸ãã4ã¤ãç´¹ä»ãã¾ãã
ãã¹ãã®ã¡ã½ããåã¨ãã¹ããã¿ã¼ã³åã¯æ¥æ¬èªã使ç¨ãã
ã¡ã½ããåã»ãã¹ããã¿ã¼ã³åããæ £ã親ããã§ããæ¥æ¬èªã§è¡¨ç¾ãããã¨ã§ãææ§ããæé¤ãã¤ã¤ãã¹ãå 容ãä¸ç®ã§å¤æã§ããããã«ãã¾ããã
<?php /** * @test * @dataProvider dp_æ¡ä»¶ã«éåããå¤ãè¨å®ãã¦createããã¨ãä¾å¤ãçºçãã * @param string $attributeName * @param string $invalidValue * @return void */ public function æ¡ä»¶ã«éåããå¤ãè¨å®ãã¦createããã¨ãä¾å¤ãçºçãã(string $attributeName, string $invalidValue): void { $this->createParameters[$attributeName] = $invalidValue; $this->expectException(DomainValidationException::class); EventDate::create(...$this->createParameters); } /** * @return array */ public function dp_æ¡ä»¶ã«éåããå¤ãè¨å®ãã¦createããã¨ãä¾å¤ãçºçãã(): array { return [ 'æ¥æãYYYY/MM/DD hh:mm:sså½¢å¼ä»¥å¤' => ['date', '2000/01/01'], ]; }
ãã¹ãã®ã¡ã½ããå ã§ã¯Given-When-Thenæ§æã使ç¨ãã
GivenãWhenãThen ã®3ã¤ã®ãããã¯ã«åãã¦æ¸ããã¨ã§ãã©ã®ãããªæ¡ä»¶ããä½ãå®è¡ããã®ããæå¾ ãããçµæã¯ä½ããæç¢ºã«ãã¾ããã
<?php /** * @test * @return void */ public function createã«å¤ã渡ãã¨ã渡ããå¤ã§ã¤ã³ã¹ã¿ã³ã¹ãçæããã(): void { // Givenï¼åææ¡ä»¶ï¼ $id = 'ID'; $name = 'æ°å'; // Whenï¼æä½ï¼ $inquiry = Inquiry::create( id: $id, name: $name, ); // Thenï¼æå¾ ããçµæï¼ $this->assertSame($id, $inquiry->id); $this->assertSame($name, $inquiry->name); }
å種ã®ãã¿ã¼ã³ç³»ã®ãã¹ãã¯Data Providersã使ç¨ãã
åãã¢ãµã¼ã·ã§ã³ã§è¤æ°ãã¿ã¼ã³ã®å¤ãæ¤è¨¼ãããå ´åã«Data Providersã使ç¨ãããã¨ã§ããã¹ãã¡ã½ããã®è¨è¿°éãæ¸ãããæ³å®ããããã¿ã¼ã³ãä¸ç®ã§åããããã«ãã¾ããã
<?php /** * @test * @dataProvider dp_æ¡ä»¶ã«éåããå¤ãè¨å®ãã¦createããã¨ãä¾å¤ãçºçãã * @param string $attributeName * @param string $invalidValue * @return void */ public function æ¡ä»¶ã«éåããå¤ãè¨å®ãã¦createããã¨ãä¾å¤ãçºçãã(string $attributeName, string $invalidValue): void { // Givenï¼æ¤è¨¼å¤ã®ã¿ä¸æ¸ãï¼ $this->parameters[$attributeName] = $invalidValue; // When $this->expectException(DomainValidationException::class); // Then Inquiry::create(...$this->parameters); } /** * @return array */ public function dp_æ¡ä»¶ã«éåããå¤ãè¨å®ãã¦createããã¨ãä¾å¤ãçºçãã(): array { return [ 'æ°åã21æå以ä¸' => ['name', 'ãã¹ãæ°åãã¹ãæ°åãã¹ãæ°åãã¹ãæ°åã'], 'é»è©±çªå·ã12æå以ä¸' => ['phoneNumber', '123456789012'], 'é»è©±çªå·ã®å½¢å¼ã§ãªã' => ['phoneNumber', 'phone111111'], 'å¯¾å¿æ¥æãæ¥æã®å½¢å¼ã§ãªã' => ['createdAt', '2022-02-03'], ]; }
ã¢ãã¯ã«å¯¾ãã¹ã¿ãã¡ã½ãããå®ç¾©ããå ´åã¯ãexpectsã¾ãã¯allowsãç®çå¥ã«ä½¿ãåãã
ã¹ã¿ãã¡ã½ããã®ä½ææã¯ä»¥ä¸ã®åºæºãè¨ãã¾ãããexpectsã¨allowsã®ä½¿ç¨åºæºãæç¤ºçã«åãããã¨ã§ãã¡ã½ããå ã§æããã¹ããããäºæãæç¤ºçã«ç¤ºãããã«ãã¾ããã
ã¡ã½ãã | åºæº |
---|---|
expects | - å®ç¾©ããã¡ã½ãããå¿
ãå¼ã³åºããã¦ãããã¨ã確èªãããå ´å - ãã¹ããè¡ãä¸ã§éè¦ãªæ¡ä»¶ã¨ãªãã¡ã½ããã¨ãã¦æç¤ºãããå ´å |
allows | - ãã¹ããéãããã ãã«æ»ãå¤ãå®ç¾©ãããå ´å - å¿ ãå¼ã³åºãããããåããªãå ´å |
ä»å¾ã®å±æ
TDDã«ææ¦ãããã¨ãã¦æãããæå¿µãã¾ããããçµæã¨ãã¦ã¦ããããã¹ãã®å®è£
ã«ããã³ã¼ãå質ãåä¸ãããã¨ã§ãä»å¾ã®ä¿å®éç¨ã容æã«ãªãã¨ç¢ºä¿¡ãã¦ãã¾ãã
ãã®ä¸æ¹ã§ããã¹ãå®è£
ã¨ã³ã¼ãã¬ãã¥ã¼ã«ããªãã®å·¥æ°ãæãã£ã¦ãã¾ã£ããã¨ã¯èª²é¡ã«æãã¦ãã¾ããä»åå¾ãç¥è¦ãåå°ã«ãã¤ã¤ãAIãæ´»ç¨ãããã¨ã§ãå®è£
è
ã¨ã¬ãã¥ã¯ã¼ã®è² æ
ãæ¸ããã¦ããããã¨èãã¦ãã¾ãã
ãããã¹ããå¼·åãã¦ããã«ããã£ã¦ãæ©è½åä½ã§ã®Featureãã¹ããUI層ã«ãããE2Eãã¹ããªã©ãè¡ãªã£ãå¾ãæçµçã«TDDã«åææ¦ãããã¨ãç®æ¨ã§ãããããã®åãçµã¿ã宿½ãã¦éçºè² è·ã軽æ¸ãããã¨ã§ã顧客æºè¶³åº¦ã®åä¸ã«ãããå¤ãã®ãªã½ã¼ã¹ãå²ããããã«ãã¦ãããã¨æãã¾ãï¼
ã¹ã¿ã¤ã«ã»ã¨ãã¸ã§ã¯ãã¢ãã³ãªéçºã«ãç©æ¥µçã«ãã£ã¬ã³ã¸ãã¦ãã¾ãï¼
ãèå³ããæ¹ã¯ãã²æ¡ç¨ãµã¤ã âããã²ã覧ãã ãã âª
recruit.styleedge.co.jp
*1:以ä¸ã®ãããªãµã¤ã¯ã«ãåããã¨ã§ãåä½ããããããªã³ã¼ãããç®æãTDDã®é²ãæ¹ã
1.次ã®ç®æ¨ãèãã
2.ãã®ç®æ¨ã示ããã¹ããæ¸ãï¼ãã¹ããã¡ã¼ã¹ãï¼
3.ãã®ãã¹ããå®è¡ãã¦å¤±æããã(ã¬ãã)
4.ç®çã®ã³ã¼ããæ¸ã
5.2ã§æ¸ãããã¹ããæåããã(ã°ãªã¼ã³)
6.ãã¹ããéãç¶æ
ã®ã¾ã¾ã³ã¼ãã®ãªãã¡ã¯ã¿ãªã³ã°ãè¡ã
7.1ï½6ãç¹°ãè¿ã