カテゴリー
コンピューター

【Gradle】外部の Java コードを Spock を使ってテストする環境を整える。

はじめに。やりたいこと

  • PC のあるところに置いてある Java プロジェクトのコードのユニットテストをしたくなった。
  • Java のファイルは移動したくない。
  • Spock 使いたい。

これを、Gradle を使って解決しましたので流れをノートいたします。

解決ポイント

  • Spock なら、Java の private メソッドでもテストできる。
  • Gradle プロジェクトのため、build.gralde に Java プロジェクトの場所を書いておけば、Spock のコードは別の場所に置いておくことができる。
  • これによって、既存の Java プロジェクトにテストコードを容易に入れられない場合でも、Gradle プロジェクトを別に作ってそこに Spock ユニットテストコードを置いておくことで、既存の Java コードに絡まること無くテストが実施できる。
  • Gradle プロジェクトを作る時に、--test-framework spock を指定することでテストは Spock を指定できる。
  • Gradle プロジェクトを作る時に、--type java-application を指定し、build.gradle を編集する。—type java-library でもよいが、同様に編集する。今回の目的では既存の Java プロジェクトを別途 build.gradle で指定し、Gradle プロジェクト内に Java コードを置かないため、どちらでも build.gradle を編集することになる。

全体に渡っての参考ページ

1. Gradle プロジェクトを作成し、付属のサンプル Java コードが Spock でテストできることを確認する。

1
2
3
mkdir testJavaWithSpock
cd testJavaWithSpock
gradle init --type java-application --test-framework spock
  • java-application 部分を削除
  • ユニットテストに関係ない dependencies を削除
    build.gradle
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /*
     * This build file was generated by the Gradle 'init' task.
     *
     * This generated file contains a sample Java project to get you started.
     * For more details take a look at the Java Quickstart chapter in the Gradle
     */
     
    // Apply the java plugin to add support for Java
    apply plugin: 'java'
     
    // Apply the groovy plugin to also add support for Groovy (needed for Spock)
    apply plugin: 'groovy'
     
    // In this section you declare where to find the dependencies of your project
    repositories {
        // Use jcenter for resolving your dependencies.
        // You can declare any Maven/Ivy/file repository here.
        jcenter()
    }
     
    dependencies {
        // Use the latest Groovy version for Spock testing
        testCompile 'org.codehaus.groovy:groovy-all:2.4.12'
     
        // Use the awesome Spock testing and specification framework even with Java
        testCompile 'org.spockframework:spock-core:1.0-groovy-2.4'
        testCompile 'junit:junit:4.12'
    }

この状態で、gradle build し、BUILD SUCCESSFUL となることを確認しました♪

2. Gradle プロジェクト外に置いた Java プロジェクトを、Gradle プロジェクトからビルドできることを確認する。

をホームディレクトリに git clone したもので試すことにしました。

この apache/commons-lang をビルドするのが今の目的とします。

参考ページ

を見ながら、次のコードを追加しました。

build.gradle末尾に追加したコード
1
2
3
4
5
6
7
8
String userHome = System.getProperty("user.home")
sourceSets {
    main {
        java {
            srcDirs = [userHome + '/commons-lang/src/main/java']
        }
    }
}

次に、App.java を上記で設定した srcDirs に移動します。ユニットテストが通るか確認したいからです。

1
mv src/main/java/App.java ~/commons-lang/src/main/java/App.java`

これで修正はおしまい。

gradle build し、BUILD SUCCESSFUL となることを確認しました♪

3. Gradle プロジェクト外に置いた Java プロジェクトのメソッドを、Spock でテストする。

いよいよ今回の目的のメインです♪

の addAll メソッドをテストしてみます!

ArrayUtilsTest.groovy を src/test/groovy に追加しました。

ArrayUtilsTest.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import org.apache.commons.lang3.ArrayUtils
import spock.lang.Specification
 
class ArrayUtilsTest extends Specification {
    def "addAll int"() {
        setup:
        int[] input = [0]
 
        when:
        int[] result = ArrayUtils.addAll(input, 1, 2)
 
        then:
        int[] expected = [0, 1, 2]
        result == expected
    }
}

gradle build し、BUILD SUCCESSFUL となることを確認しました♪

おわりに

ちょっと外から Java コードの private メソッドの動きを確かめたいな、、、Java プロジェクトに単体テストがなく、今後もプロジェクトとして追加される見込みが無いけど、改修するときは private メソッドも含めて細かくユニットテストを回していきたいな、、、という時に、今回のノウハウが役に立ちます♪

以上です。

「【Gradle】外部の Java コードを Spock を使ってテストする環境を整える。」への1件の返信

コメントを残す