cuke4duke ã使ã Cucumber ã Java ã§ä½¿ã
å
æ¥ã®TDDBC 札幌 2.1 ã§Cucumberã®è©å¤ãè¯ããATDDï¼åå
¥ãã¹ãé§åéçºï¼ã¸èå³ãæã£ã人ãå¤ãã£ããããJavaã§ã®Cucumberã®å©ç¨æ¹æ³ã調ã¹ã¦ã¿ã¾ããã以å調ã¹ãæã¯è¦ã¤ããããªãã£ãã®ã§ãããä»ã¯ cuke4duke ã¨ãããã¼ã«ã使ããã¨ã§ãJavaãGroovyã使ã£ã¦Javaã¢ããªã±ã¼ã·ã§ã³ã§ãç°¡åã« Cucumber ãå©ç¨ã§ããããã§ããã¡ãªã¿ã«ã cuke 㯠cucumberã®æç§°ã ããã§ãduke ã¯Javaã®ã¢ã¬ã§ããã
ã¡ãªã¿ã«2011/09/24ç¾å¨ãcuke4dukeã®éçºã¯æ¢ã¾ã£ã¦ãããå¾ç¶ã¨ãªãcucumber-jvmã®éçºãè¡ããã¦ãã¾ããã§ãããç¾æç¹ã§ã¯cucumber-jvmãåãããã¨ã¯åºæ¥ã¾ããã§ããããªãªã¼ã¹ããã¤é ãã¡ãã£ã¨ä¸æã§ããã¨ã¯ããããCucumber for the JVM (successor of Cuke4Duke)ãã¨æ¸ãã¦ããã®ã§ãã¾ãã¯Cuke4Dukeãç¥ã£ã¦ããã°ç§»è¡ãã¹ã ã¼ãºã«ã§ããã¨æãã¾ãã
æºå
cuke4dukeã¯é常ã«ããã§ãããã¼ã«ãªã®ã§ãããããã¥ã¡ã³ãã壿»
çã«ããã¾ããã§ãã...ãããã¦ãè´å½çãªã®ã¯Rubyã®æåãJavaã®æåãè§£ããªãã¨ç°å¢æ§ç¯ã ãã§æ«æãããã¨ããæã§ãããã®è¾ºã¯æ¤ç´¢ãã¦ãããã¾ããããããªãã®ã§ãå°ãç´°ããæ¸ãã¦ããã¾ãã
ã¾ããcuke4dukeã®ä»çµã¿ãç°¡åã«èª¬æããã¨ããJRubyä¸ã§Cucumberãå®è¡ããJavaãGroovyã§è¨è¿°ãããã¹ããããã¡ã¤ã«ãå®è¡ããã¾ããå®è¡ã¯ã³ãã³ãã©ã¤ã³ãMavenã§å®è¡ã§ãã¾ããã¾ããJRubyã¯RVMä¸ã«æ§ç¯ãã¦ããã¨ä¾¿å©ã§ãã
ã¨ããããã§ã以ä¸ã®ã»ããã¢ãããå¿
è¦ã¨ãã¾ãã
ï½° JDK + Maven2
- RVM + JRuby
- Cucumberï¼cuke4dukeï¼
å°ãMacï¼Snow Leopardï¼ã§ã®æ§ç¯æ¹æ³ã«ã¤ãã¦è¨è¿°ãã¾ãããRVMããã以å¤ã¯Windowsã§ãåãããã«ã§ããã¨æãã¾ãã
Mavenãã³ãã³ãã©ã¤ã³ãï¼
Mavenã«ããå®è¡ã¯Jenkinsãªã©CIã使ãå ´åã¯é常ã«ä¾¿å©ã§ããå®è¡æéã¯ã³ãã³ãã©ã¤ã³ãããããæéããããã®ã§ãããçµ±åããããã«ããã¼ã«ã«å«ããããã¨ããã®ã¯é常ã«å¤§ããªã¢ããã³ãã¼ã¸ã§ããããããMavenã§å®è¡ããå ´åãä»ã®ãã«ãããã»ã¹ãåããããé½åº¦JVMãèµ·åããããã«JRubyã®ç°å¢ãèªã¿è¾¼ã¾ãããã¨ãªã¼ãã¼ããããé«ãããµã¯ãµã¯éçºããããã«ä½¿ãã«ã¯åé¡ãæ®ãã¾ããAntã使ã£ãå ´åã§ãåæ§ã§ãããã
ã³ãã³ãã©ã¤ã³ããã®å®è¡ã§ã¯ãRubyã§Cucumberã使ãããã«JRubyã§å©ç¨ã§ããäºãæå¤§ã®ã¢ããã³ãã¼ã¸ã§ãã@wipï¼work in progressï¼ã¿ã°ãå©ç¨ããã°ç°¡åã«ä½æ¥ä¸ã®ã·ããªãªã®ã¿ãå®è¡ã§ãããªã©ã¡ãªããã¯å¤ãããã¾ããããããIDEããå©ç¨ãã«ããäºãJRubyã®èµ·åã¯ãã¯ãé
ãäºããã¡ãªããã§ããå°ãJRubyã®èµ·åãé
ãåé¡ã«ã¤ãã¦ã¯ãGroovyservã使ãäºã§åçã«æ¹åãããããã¨æã調æ»ããã¦ã¿ã¾ããããã³ãã³ãã䏿ãèªèãã¦ããªãã®ãã¾ã æåãã¦ãã¾ããã
ä»ã®å®è¡ææ®µã¨ãã¦ãå¾ç¶ã®cucumber-jvmã§ã¯JUnitã®ãã¹ãã±ã¼ã¹ã¨ãã¦å®è¡ããæ¹æ³ãæä¾ãããããã§ããããã¯ãEclipseä¸ããç°¡åã«å®è¡ã§ããã¨ãããã¨ã§ããã¾ã 詳細ã¯ãããã¾ããããæ°ã«ãªãæ©è½ãã¨æãã¾ãã
ã¾ã¨ããã¨ãCIã§å©ç¨ããã«ã¯Mavenããã以å¤ã§ããã°ã³ãã³ãã©ã¤ã³ã¨ããã®ãç¾ç¶ã®å®è¡æ¹æ³ãã¨æãã¾ãã
JDK + Maven2
JDKã¯ã¤ã³ã¹ãã¼ã«ããã¦ããªããªãã¤ã³ã¹ãã¼ã©çã使ã£ã¦ã¤ã³ã¹ãã¼ã«ãã¦ãã ãããMavenã¯ã¾ã 2ç³»ã使ã£ã¦ãããæ¹ãç¡é£ã§ã*1ãMavenã®ãµã¤ãããã2.2.1ããã¦ã³ãã¼ãããé©å½ãªãã£ã¬ã¯ããªã«è§£åãããããã¹ãéãã ãã§æºåã¯å®äºãã¾ãã以ä¸ã®ã»ããã¢ãããçµãã£ããªãã°ãmvn ã³ãã³ããå®è¡ãã¦ç¢ºèªãã¾ãã
$ mvn --version
Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)
Java version: 1.6.0_26
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: SJIS
OS name: "mac os x" version: "10.6.8" arch: "x86_64" Family: "mac"
MacBookPro:groovy shuji$
RVM + JRuby
RVMã¯Rubyã®å®è¡ç°å¢ãè¤æ°ã¤ã³ã¹ãã¼ã«ãã¦åãæ¿ãã¦å©ç¨ã§ããããã«ããããã®ãã¼ã«ã§ããMacã§ã¯ããã©ã«ãã§Ruby 1.8.7ãã¤ã³ã¹ãã¼ã«ããã¦ãã¾ããããããæ®ããã¾ã¾JRubyãå©ç¨ã§ããããã«ãã¾ããã¾ããCucumberãªã©ã®è¿½å ããã©ã¤ãã©ãªãRVMã®ãã£ã¬ã¯ããªï¼ãã¼ã 以ä¸ï¼ã«å
¥ãããç°å¢ãæ±æããªãã¨ããã¡ãªãããããã¾ãã
RVMã®ã¤ã³ã¹ãã¼ã«ã¯ãgit ããã½ã¼ã¹ãåå¾ãã¦ã¤ã³ã¹ãã¼ã«ããæ¹æ³ã¨gemã使ã£ã¦ã¤ã³ã¹ãã¼ã«ããæ¹æ³ãããããã§ãããgemã«ããã¤ã³ã¹ãã¼ã«ã¯çµå±åãã¾ããã§ãããå¤ã®ãµã¤ãã§ãgitããã¤ã³ã¹ãã¼ã«ãããã¨ãæ¨å¥¨ãã¦ããããã§ããgitãã¤ã³ã¹ãã¼ã«ããã¦ããªãå ´åã¯ã°ã°ã£ã¦ãã ããã
mkdir -p ~/.rvm/src
cd ~/.rvm/src
git clone git://github.com/wayneeseguin/rvm.git
cd rvm
./install
rvmã¯~/.rvm以ä¸ã«ã¤ã³ã¹ãã¼ã«ãããã®ã§ã以ä¸ã®ã¹ã¯ãªãããå®è¡ãã¦ãã¹ãéãã¾ãï¼~/.bashrcã«è¿½å ï¼ã
-s "$HOME/.rvm/scripts/rvm" && source "$HOME/.rvm/scripts/rvm"
ç¶ãã¦JRuby-1.6.4ãrvmã®ã³ãã³ãã使ãã¤ã³ã¹ãã¼ã«ãã¾ãã
rvm install jruby-1.6.4
JRubyã¯~/rvm以ä¸ã«ã¤ã³ã¹ãã¼ã«ããã¾ããçµæ§ãªå®¹éãããã¾ãã®ã§æ³¨æãã¦ãã ãããä»å¾ã¯ä»¥ä¸ã®ã³ãã³ãã使ããã¨ã§ãå©ç¨ããRubyãJRubyã«åãæ¿ãããã¨ãã§ãã¾ãã
$ rvm use jruby
$ ruby --version
jruby 1.6.4 (ruby-1.8.7-p330) (2011-08-23 17ea768) (Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [darwin-x86_64-java]
Mac
cuke4dukeã®ã¤ã³ã¹ãã¼ã«
cuke4dukeãgitããåå¾ãã¦ã¤ã³ã¹ãã¼ã«ãã¾ãããjarãã¡ã¤ã«ãä½ãããã«mavenã³ãã³ããå¿ è¦ã§ããMavenã«ãããã«ãã¯å©ç¨ãããã¨ã®ãªããã©ã°ã¤ã³ãä¾åã©ã¤ãã©ãªããã¦ã³ãã¼ããã¦è¡ãã¾ãã®ã§ãæéããããã®ã§æ³¨æãã¦ãã ããã
git clone https://github.com/cucumber/cuke4duke
cd cuke4duke
mvn package
以ä¸ãå©ç¨ãã¦ããRubyç°å¢ï¼RVMä¸ã®JRubyï¼ã®gemã«è¿½å ããã¾ãã
gem install bundler
bundle install
rake install
以ä¸ã§cuke4dukeã®ã¤ã³ã¹ãã¼ã«ã¯å®äºã§ãã
ãµã³ãã«ã®å®è¡
exampleãã£ã¬ã¯ããªã«ãµã³ãã«ããã¸ã§ã¯ããå¹¾ã¤ãç¨æããã¦ããã®ã§ãã¾ãã¯ããããå®è¡ãã¦ã¿ã¾ãã
javaããã¸ã§ã¯ã
example/javaã¯ãã·ã³ãã«ãªJavaããã¸ã§ã¯ãã§ããã³ã³ãã¤ã«ããã¦ãã¾ããã®ã§ãmvnã³ãã³ãã§æåã«ã³ã³ãã¤ã«ãã¾ããã¾ããããã¸ã§ã¯ãã§å©ç¨ãã¦ããã©ã¤ãã©ãªãããã¸ã§ã¯ãé ä¸ã«ã³ãã¼*2ããå¿ è¦ãããã¾ã*3ã
mvn package dependency:copy-dependencies
ã³ãã³ãã©ã¤ã³ããå®è¡ããã«ã¯ãä¾åã©ã¤ãã©ãªã¨ã¯ã©ã¹ãã¡ã¤ã«ãªã©ã®ãã¹ãæå®ãã¾ãã
cuke4duke --jars target/dependency --require target/test-classes
-
- requireã«ã¯ããã£ã¼ãã£ã®å®è¡ã«å¿ è¦ãªãã¡ã¤ã«ã®ãããã£ã¬ã¯ããªãæå®ãã--jarsã«ã¯å®è¡æã«å¿ è¦ãªã©ã¤ãã©ãªã®ãããã£ã¬ã¯ããªãæå®ãã¾ãããã ãä¾åé¢ä¿ã®è§£æ±ºãªã©ã«ä¸å ·åãå¤ãããã§ã³ãã³ãã©ã¤ã³ããã®å®è¡ã¯ãã¾ããããªãå ´åãå¤ãã§ãï¼ç¹ã«Groovyãªã©ã使ãå ´åï¼ã
Mavenã§å®è¡ããã«ã¯ãã©ã°ã¤ã³ãèªåçã«ä¾åã©ã¤ãã©ãªãªã©ã¯è§£æ±ºããã®ã§ã以ä¸ã®ã³ãã³ãã§ç°¡åã«å®è¡ã§ãã¾ãã
mvn -Dcucumber.installGems=true integration-test
Javaã§ã¹ããããè¨è¿°ããå ´åã¯ãJavaã®ã¯ã©ã¹ã¨ãã¦è¨è¿°ãã--requireã§ã¯ã©ã¹ãã¡ã¤ã«ããããã£ã¬ã¯ããªãæå®ããªãã¦ã¯ãªãã¾ãããä»ã®è¨èªã§ã¹ããããã¡ã¤ã«ãè¨è¿°ããå ´åã¯ãfeaturesã®ä¸ã«step_definitionsãä½ãã¹ã¯ãªãããã¡ã¤ã«ãé ç½®ãã¾ãï¼Groovyãªã©ã§å¯¾å¿ï¼ã
package simple; import cuke4duke.annotation.I18n.EN.Given; import cuke4duke.annotation.I18n.EN.Then; import static org.junit.Assert.assertTrue; public class CalledSteps { private boolean magic; @Given("^it is (.*)$") public void itIs(String what) { if (what.equals("magic")) { magic = true; } } @Then("^magic should happen$") public void magicShouldHappen() { assertTrue(magic); } } >>
*1:Pluginã®å¯¾å¿ãæ å ±ãå°ãªããã
*2:Mavenããã¸ã§ã¯ãã®å ´åããã¼ã«ã«ãªãã¸ããªã«ã©ã¤ãã©ãªãä¿åãããã³ã³ãã¤ã«ã»å®è¡æã«ãã¹ãéã
*3:ãã®è¾ºãé¢åã§ãâ¦