IntelliJ IDEAでSpockはじめました

GettingStarted のIntelliJ IDEAの設定を参考にして、IntelliJ IDEAでSpockをはじめてみました。
とりあえず、環境設定とサンプルの実行で素振の準備。




Groovy1.8.6 はインストール済み。

ダウンロード

IntelliJ IDEAでの設定

1.IntelliJ IDEAを起動
2.プロジェクトの作成
  • 1)File > New Project

  • 2)Create project from scatch

  • 3)プロジェクト名 HelloSpock 設定

  • 4)Create source directory

  • 5)Groovyにチェックを入れる



3.Module Settings
  • 1)srcを右クリックでOpne Module Settingsを選択

  • 2)Dependenciesタブ で + ボタンで「Jars or directories」から追加


Spockのドキュメントだと以下になっている。

In "Module settings", add a "Single-Entry Module Library" for groovy-all-1.8.6.jar, junit-4.9.jar, and spock-core-0.6.jar

Single-Entry Module Library が見当たらなかった。Community Edtionだから?バージョンの違い?
誰か教えて。






  • 3)ダウンロードしたSpockを選択

  • 4)追加した状態



4.Sock用のGroovyクラス追加

  • 1)右クリック new > Groovy Class

GroovyClassとGroovy Scriptって何が違うんだ??


  • 2)HelloSPock という名前

  • 3)コードを写経

import spock.lang.*


class HelloSpock extends spock.lang.Specification {
    def "length of Spock's and his friends' names"() {
        expect:
        name.size() == length

        where:
        name      | length
        "Spock"  | 5
        "Kirk"   | 4
        "Scotty" | 6

    }

}
  • 4)右クリックからRun HelloSpock

5.実行


OK

疑問

IntelliJ IDEA上で@grabって使えないの??
Grabでいけると思ったら、エラーになった。

@Grab('org.spockframework:spock-core:0.6-groovy-1.8')
@GrabExclude('org.codehaus.groovy:groovy-all')

import spock.lang.Specification

/**
 * @author orangeclover
 */
class SpockTest extends Specification {
    def "length of Spock's and his friends' names"() {
        expect:
        name.size() == length

        where:
        name      | length
        "Spock"  | 5
        "Kirk"   | 4
        "Scotty" | 6

    }
}
エラー
C:\usr\opt\java\jdk1.7.0_02\bin\java -ea -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:\usr\opt\JetBrains\IntelliJ IDEA Community Edition 11.1.2\bin" -Dfile.encoding=UTF-8 -classpath "C:\usr\opt\JetBrains\IntelliJ IDEA Community Edition 11.1.2\lib\idea_rt.jar;C:\usr\opt\JetBrains\IntelliJ IDEA Community Edition 11.1.2\plugins\junit\lib\junit-rt.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\alt-rt.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\charsets.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\deploy.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\javaws.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\jce.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\jsse.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\management-agent.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\plugin.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\resources.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\rt.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\ext\dnsns.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\ext\localedata.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\ext\sunec.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\ext\sunjce_provider.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\ext\sunmscapi.jar;C:\usr\opt\java\jdk1.7.0_02\jre\lib\ext\zipfs.jar;C:\workspace\Spock_SandBox\SpockTest\out\production\SpockTest;C:\usr\opt\Groovy\groovy-1.8.6\lib\ant-1.8.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\ant-antlr-1.8.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\ant-junit-1.8.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\ant-launcher-1.8.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\antlr-2.7.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\asm-3.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\asm-analysis-3.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\asm-commons-3.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\asm-tree-3.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\asm-util-3.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-anim-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-awt-util-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-bridge-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-codec-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-css-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-dom-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-ext-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-extension-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-gui-util-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-gvt-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-parser-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-script-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-svg-dom-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-svggen-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-swing-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-transcoder-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-util-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\batik-xml-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\bsf-2.4.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\commons-cli-1.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\commons-logging-1.1.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\extra166y-1.7.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\Filters.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\gpars-0.12.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-animation-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-jdk6-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-jhlabs-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-substance-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-svg-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-swf-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\graphicsbuilder-ext-swingx-0.6.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\groovy-1.8.6.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\hamcrest-core-1.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\ivy-2.2.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\jansi-1.7.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\jline-0.9.94.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\jsilhouette-geom-0.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\jsp-api-2.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\jsr166y-1.7.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\junit-4.10.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\MultipleGradientPaint.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\servlet-api-2.4.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\substance-5.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\substance-extras-5.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\swingx-0.9.2.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\timingframework-1.0.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\transformSWF-2.3.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\xml-apis-ext-1.3.04.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\xmlpull-1.1.3.1.jar;C:\usr\opt\Groovy\groovy-1.8.6\lib\xstream-1.4.1.jar" com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 SpockTest
Exception in thread "main" java.lang.NoClassDefFoundError: spock/lang/Specification
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
	at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:264)
	at com.intellij.junit4.JUnit4TestRunnerUtil.loadTestClass(JUnit4TestRunnerUtil.java:224)
	at com.intellij.junit4.JUnit4TestRunnerUtil.appendTestClass(JUnit4TestRunnerUtil.java:208)
	at com.intellij.junit4.JUnit4TestRunnerUtil.buildRequest(JUnit4TestRunnerUtil.java:161)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
	at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195)
	at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
Caused by: java.lang.ClassNotFoundException: spock.lang.Specification
	at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
	... 25 more

Process finished with exit code 1

おろ??