JBehaveã§Behaver Driven Developmentãä½é¨ãã¦ã¿ã
Behaver Driven Developmentã£ã¦ä½?
è¦ããã«ãDomain Driven Designã®ãåãã¢ãã«ãããã¸ã§ã¯ãã«ãããã¦ããã¿ã¹è¨èªã«ãããã¨ããçºæ³ã¨åãã§ããªãã¨ãè¨è¨æ¸ãä»æ§æ¸ã¨ãã¹ãã±ã¼ã¹ã製åã³ã¼ããã°ãã°ãã«ç®¡çããã®ã§ã¯ãªããæè¡ç詳細ãé è½ãã¦ãã¸ãã¹ã¦ã¼ã¶ã¼ã¨å¯¾è©±ã§ããã¬ãã«ã«ã¾ã§æ½è±¡åãããå®è¡å¯è½ãªä»æ§æ¸ããä½æãããã¨ã§ã³ãã¥ãã±ã¼ã·ã§ã³ãåæ»åããããã¥ã¡ã³ããä»æ§ã¨å®éã®ææç©ã¨ã®ä¹é¢ãé²ãã¨ããçããããããã§ããä¸æã®çµµã«ããã¨ã ããããããªæãã ã¨æããã¾ãã
ãå®è¡å¯è½ãªä»æ§æ¸ãã¨ãã£ã¦ããå®éã«ããã°ã©ã ã¨ãã¦å®è¡å¯è½ãªããã§ã¯ãªããåã¹ãã¼ãªã¼ã®ä¸æ=ã¹ãããã«å¯¾å¿ãããã¹ãã±ã¼ã¹ããã°ã©ã ãç¨æããå®è¡ãã¦ãããã¨ã«ãªãã¾ããããã ããã åã«åã¹ãããã«å¯¾å¿ãããã¹ãã±ã¼ã¹ãå®è¡ããã ãã«ãªã£ã¦ãã¾ãã¾ãããããã¯ä¸å·¥å¤«ããã¦ãã¾ããSpringãJAX-RSããã¤ã³ã¹ãã¤ã¢ãããã®ã ã¨æããããã¹ãããããå¤ããã£ããã£ããæ©è½ããããããããç¨ãããã¨ã§ãââã®æ°ã¯"10"åã§ãããã®ã10åãã®é¨åã®ãããªé¨åããã¹ãã±ã¼ã¹ã¸ã®å ¥åã¨ãã¦ãã£ããã£ãããã¨ãã§ãã¾ãã
ãè¤éãªAcceptance Testã®èªååãã¨ããã¨ããã«ä¸»ç¼ãç½®ããã¦ãã¾ããããã®ãå®è¡å¯è½ãªä»æ§æ¸ãã®éè¦æ§ã¯ãCONTINUOUS DELIVERYã§ããCHAPTER8 AUTOMATED ACCEPTANCE TESTINGãã§ã丸ã
ä¸ç« ãå²ãã¦æ§ã
ãªãã¯ããã¯ã¨å
±ã«è©³ç´°ã«è§£èª¬ããã¦ãã¾ããJBehaveã ãè¦ã¦ããã¨ãã¾ãã´ãã¨æ¥ã¾ããã§ããããããã°ã©ã ã§ä»æ§ãæ¸ãã¦JUnitããå®è¡ã§ããâèªååã§ãã
ã¨ãããã¨ã«ãªãã¾ããã
JUnitã«çµã¿è¾¼ãã§å®è¡ãã¦ã¿ã
Githubä¸ã«é常ã«ã·ã³ãã«ãªãµã³ãã«ãç½®ãã¦ããã¾ãããhttps://github.com/zyake/jbehave-hello-world
ä»æ§æ¸
ä»æ§æ¸ã¯å°ç¨ã®ææ³ã«ãããã£ã¦è¨è¿°ãã¾ãã
calculation service storiesScenario: calculates sum of two values (less than int max)
Given the system is ready
When I sum up the value "5" and the value "10"
Then the result should equal to 15Scenario: calculates sum of two values (equal to int max)
Given the system is ready
When I sum up the value "1073741823" and the value "1073741824"
Then the result should equal to 2147483647
ã¹ãããã®å®è£
ä»æ§æ¸ã«ããåã¹ãããã®å®è£ ã¯ä»¥ä¸ã®ã¨ããã«ãªãã¾ããpublic class CalculationSteps extends Steps { private Calculator calculator; private int result; @Given("the system is ready") public void theSystemIsReady() { this.calculator = new Calculator(); } @When("I sum up the value \"$var1\" and the value \"$var2\"") public void iSumVar1AndVar2(int var1, int var2) { result = calculator.sum(var1, var2); } @Then("the result should equal to $value") public void thenTheResultShouldEqualToTheValue(int value) { assertThat(result, is(value)); } }
ãã¹ãã±ã¼ã¹ã¯ã©ã¹
ä»æ§æ¸ã¨ã¹ãããã®å®è£ ããã¹ãã±ã¼ã¹ã§é¢é£ä»ããã¦å®è¡ãã¾ããè¦æ³¨æãªã®ã¯ãJUnitããå®è¡ããå ´åãã©ã®ã¹ããããå®éã«å®è¡ãããã®ã表示ãããªããããã¹ãããåä½ã§ã®å®è¡çµæã確èªãããå ´åã¯ã以ä¸ã®ã©ã¤ãã©ãªã使ç¨ããå¿ è¦ãããã¾ããhttps://github.com/codecentric/jbehave-junit-runner
使ãæ¹ãã·ã³ãã«ã§ãå®è¡å¯¾è±¡ã®ãã¹ãã±ã¼ã¹ã¯ã©ã¹ã«ä»¥ä¸ã®1è¡ã追å ããã ãã§ãã
@RunWith(JUnitReportingRunner.class)
@RunWith(JUnitReportingRunner.class) public class CalculationStoriesTest extends JUnitStories { @Override public InjectableStepsFactory stepsFactory() { return new InstanceStepsFactory(new MostUsefulConfiguration(), new CalculationSteps()); } @Override protected List<String> storyPaths() { // ããã©ã«ãè¨å®ã§ã¯ã¯ã©ã¹ãã¹ããæ¤ç´¢ããã return Arrays.asList("calculation.story"); } }
å®éã«ã¢ããªã±ã¼ã·ã§ã³ãéçºããå ´åã¯ããã¼ã¿ã®åæåæ¹æ³ãéåæã®å¦çã®å¾ ã¡åãããéçºéä¸ã®ã·ã¹ãã ã®ã¹ã¿ããå¤æ¥ã·ã¹ãã ããã©ã¤ãã®ä½æãªã©ãå¿ è¦ã«ãªããSeleniumãªã©ã使ã£ã¦Webç»é¢ã¨æ¦ãå¿ è¦ãããããããã¾ããããç¸å½ã®çµé¨ã¨æè¡åãå¿ è¦ã§ãä¸çç¸ã§ã¯è¡ããªãã¨æããã¾ãã
BDDã®å¹æã¯ï¼
çµå±ããã¹ãã±ã¼ã¹ã«ç¸å½ããããã°ã©ã ã¯èªåã§ä½ããªããã°ãªããªãã®ã§ãã©ããã£ãå¹æãããã®ãçåã«æãæ¹ãããã¨æãã¾ãããå人çã«ã¯ãæèãå¤ããããä»æ§æ¸ã¨ã®ä¹é¢ãé²ããç¶æã¡ã³ãæ§ãé«ããããã¨ã«ã¯ãããªãå¹æãããã®ã§ã¯ãªããã¨æãã¾ãã
ä¾ãã°ãçµå試é¨ã®ä»æ§æ¸ãä½æãããã®ã¨ãããã¹ãã±ã¼ã¹ãå®è£ ããã¨ãã¦ããä»æ§å¤æ´ããã°ä¿®æ£ã®å½±é¿ã§ãã©ã¡ã¼ã¿ããã¹ãã®ã¹ããããå¤ããããããã¯ä»æ§æ¸ããã®ã³ãããã¹ãå®è£ ãã¹ã§ä»æ§æ¸ã¨ä¹é¢ãã試é¨ãå®æ½ããããã¨ã¯æ¥µæ®éã«èµ·ãããã¾ãã
ããããJBehaveã使ã£ã¦ä»æ§æ¸ã¨ãã¹ãã±ã¼ã¹ã®çµå度ãé«ãããã¨ãã§ããã°ããä»æ§æ¸ã«æ¸ãã¦ãã試é¨ãå
¨ãå®æ½ããã¦ããªããããã©ã¡ã¼ã¿ãéä¸ã§å¤ãã£ã¦ãã¾ã£ããããã¹ãã±ã¼ã¹ã¯ããããä»æ§æ¸ã®ã©ã®è¨è¿°ã«å¯¾å¿ãã¦ããã®ãããããªãããªã©ã¨ãã£ãèªä½ãèµ·ãã¥ãããããã¨ã¯ã§ãã¾ããã¾ããä»æ§æ¸ã¯æè¡çãªè©³ç´°ãé è½ããã¦ããã®ã§ããã¹ã¿ã¼ãéä¸ã§ãã©ã¡ã¼ã¿ãã¹ãããã®é åºãå¤ããã
ãããã¯ãã¹ãã±ã¼ã¹ã®ä½æã¨ãã¹ãã±ã¼ã¹ã®å®è£
ã®åé¢ãæ¬æ¥ã®ç®çã§ãããã¸ãã¹ã¦ã¼ã¶ã¼ã¨éçºè
ã®å¯¾è©±ã®ä¿é²ã¨ãã£ãå¹æã¯ããã¨æãã¾ãã
åèè³æ
- JBehaveå ¬å¼
- http://jbehave.org/
- AiL – Simplest JBehave Scenario - Software is too expensive to build cheaplyâ¦.
- http://twasink.net/2012/06/25/ail-simplest-jbehave-scenario/
- CONTINUOUS DELIVERY
- http://www.amazon.com/dp/0321601912?tag=contindelive-20