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

最終更新日

アイキャッチ

背景

  • 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に依存関係を追加

    
        org.spockframework
        spock-core
        1.3-groovy-2.5
        test
    
  2. テストを書く

    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参照)

        
            
                
                    maven-compiler-plugin
                    3.8.1
                    
                        1.8
                        1.8
                        UTF-8
                        groovy-eclipse-compiler
                        true
                        
                            
                            config.groovy
                            
                            lombok.launch.Agent
                        
                        true
                    
                    
                        
                            org.codehaus.groovy
                            groovy-eclipse-compiler
                            3.3.0-01
                        
                        
                            org.codehaus.groovy
                            groovy-eclipse-batch
                            2.5.6-01
                        
                        
                            org.projectlombok
                            lombok
                            1.16.20
                        
                    
                
            
        
  2. テスト実行してみる

    ./mvnw test
    → BUILD SUCCESS

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

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

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

        
            maven-surefire-plugin
            3.0.0-M1
            
                true
                
                    **/*Test.*
                    **/*Spec.*
                
            
            
                
                    org.apache.maven.surefire
                    surefire-junit47
                    3.0.0-M1
                
            
        

    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

stmon19

遊びが一番 人生遊び 好きにまみれてます