LoginSignup
6

More than 3 years have passed since last update.

mavenプロジェクトでJUnitとSpockを実行する

Last updated at Posted at 2019-06-13

背景

  • mavenのプロジェクト
  • JUnitでわずかながらテストが書かれていた
  • JUnitでテストを書き続けるのは辛い
  • Spockでテストを書きたい

※ gradleにspock導入経験有り

概要、やりたいこと

  • 既存のJUnitを残しつつ、Spockも追加していきたい
  • JUnitとSpockをひとつのコマンドで一発で実行したい(./mvnw test
  • spockがどう素晴らしいかなどは記載しません

って話です。
未だにMavenでJUnitを使ってテストしている人に捧ぐ…

環境

  • maven3
  • java8
  • groovy2.5

手順

流れ

  1. とりあえず、spockを追加してテストを書く
  2. mavenでgroovyファイルをコンパイル対象にする
  3. mavenで*Spec.ファイルをテスト実行対象にする

とりあえず、spockを追加してテストを書く

  1. pom.xmlに依存関係を追加

    pom.xml
    <dependency>
        <groupId>org.spockframework</groupId>
        <artifactId>spock-core</artifactId>
        <version>1.3-groovy-2.5</version>
        <scope>test</scope>
    </dependency>
    
  2. テストを書く

    AppSpec.groovy
    package jp.co.trech
    
    import spock.lang.*
    
    class AppSpec extends Specification {
        def 'サンプルテスト'() {
            expect:
            Math.max(1, 2) != 2 // テスト実行されているか確認したいので、あえて落ちるテストにしておく
        }
    }
    
  3. テスト実行してみる

    ./mvnw test
    → BUILD SUCCESS
    

    → compileされたファイルが生成されない & Spockも実行されていない

mavenでgroovyファイルをコンパイル対象にする

  1. gradleではspockを依存関係に入れるだけでgroovyファイルもコンパイルしてくれていたが、mavenではコンパイルしてくれなかったので以下を追加
    ※ maven-compiler-pluginは3.6.2以上じゃないと動かない模様(Groovy Eclipse Maven plugin参照)

    pom.xml
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                        <compilerId>groovy-eclipse-compiler</compilerId>
                        <verbose>true</verbose>
                        <compilerArguments>
                            <indy/><!-- optional; supported by batch 2.4.12-04+ -->
                            <configScript>config.groovy</configScript><!-- optional; supported by batch 2.4.13-02+ -->
                            <!-- consult Lombok docs to confirm agent class name for your version -->
                            <javaAgentClass>lombok.launch.Agent</javaAgentClass>
                        </compilerArguments>
                        <fork>true</fork>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.codehaus.groovy</groupId>
                            <artifactId>groovy-eclipse-compiler</artifactId>
                            <version>3.3.0-01</version>
                        </dependency>
                        <dependency>
                            <groupId>org.codehaus.groovy</groupId>
                            <artifactId>groovy-eclipse-batch</artifactId>
                            <version>2.5.6-01</version>
                        </dependency>
                        <dependency><!-- optional; プロジェクト内でlombokを使っている場合は追加 -->
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.16.20</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    
  2. テスト実行してみる

    ./mvnw test
    → BUILD SUCCESS
    

    → compileされたファイルが生成された!
    → だがSpockは実行されない

mavenで*Spec.ファイルをテスト実行対象にする

  1. 上記maven-compiler-pluginの次に以下を追加

    pom.xml
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M1</version>
            <configuration>
                <failIfNoTests>true</failIfNoTests>
                <includes>
                    <include>**/*Test.*</include>
                    <include>**/*Spec.*</include>
                </includes>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven.surefire</groupId>
                    <artifactId>surefire-junit47</artifactId>
                    <version>3.0.0-M1</version>
                </dependency>
            </dependencies>
        </plugin>
    

    maven-surefire-pluginのversionはjavaのversionによるので、Maven Surefire Plugin参照

  2. テスト実行してみる

    ./mvnw test
    → BUILD FAILURE
    

    → compileされたファイルが生成された!
    → Spockも実行されたのでテスト落ちた!

→ Spockのテストを修正してテストが通れば完了!

結論

  • gradleには簡単にSpock入れられたのにmavenにSpock追加するのは大変
  • おとなしくgradle使いましょう

参考URL

Compiling Groovy
maven-surefire-plugin Using JUnit
groovy/groovy-eclipse Groovy Eclipse Maven plugin

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6