Skip to content

Version2 in Japanese

opengl-8080 edited this page Dec 10, 2017 · 6 revisions

ここでは、 assertjGen-gradle-plugin の version2 についての説明を記載します。
version1 については Version1 in Japanese を参照してください。

Version1 との違い

Version1 は、 AssertJ Assertions Generator が提供している CLI 用の API をラップしただけのシンプルなプラグインでした。
CLI の API は AssertJ Assertions Generator の最小限の機能しか提供していなかったため、 Version1 がサポートする機能も限られていました。

一方で、 Version2 はAssertJ Assertions Generator Maven Plugin を完全にラップしています。
従って、 Version2 は Maven Plugin と同等の機能を提供することができます。

使い方

インストール方法

Gradle - Plugin: com.github.opengl-BOBO.assertjGen2

このページに設定方法が載っているので、そちらを参照ください。

これはなに?

assertjGen タスクを追加するプラグインです。

このタスクは、 AssertJ Assertions Generator を使用してアサーションクラスを生成します。

アサーションクラスが何なのかについては、リンク先を参照していただくか、 こちらの Qiita の記事 を参照してください。

設定

基本

build.gradle

buildscript {
    repositories {
        maven {
          url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "gradle.plugin.com.github.opengl-8080:assertjGen-gradle-plugin:2.0.0"
    }
}

apply plugin: "com.github.opengl-BOBO.assertjGen2"

repositories {
    mavenCentral()
}

dependencies {
    testCompile 'junit:junit:4.12'
    testCompile 'org.assertj:assertj-core:3.5.2'
}

assertjGen {
    packages = ['foo.bar']
}

プラグインを読み込んで、 assertjGen を使って各種オプションを指定していきます。

Maven プラグインが提供しているオプション

Version2 は Maven プラグインをそのままラップしているので、オプションの指定の仕方などは基本的にどれも Maven プラグインと同じです。
Maven プラグインとの大きな違いは、記法が Gradle (Groovy) の方法に則っているという点です。

assertjGen {
    /*
     * Assertion を作成するクラスが存在するパッケージを List で指定する.
     * これか classes のいずれかは、必ず指定しなければならない.
     */
    packages = ['foo.bar', 'fizz.buzz']

    /*
     * Assertion を作成するクラスを List で指定する.
     * これか packages のいずれかは、必ず指定しなければならない.
     */
    classes = ['foo.bar.SomeClass', 'fizz.buzz.AnyClass']

    /*
     * ドメインクラスが継承関係を持つときに、生成する Assertion クラスにも継承関係を持たせる.
     * デフォルト true.
     */
    hierarchical = true

    /*
     * true を設定した場合、フィールドの可視性に関係なく全てのフィールドでアサーションを生成する.
     * デフォルトは false で、 public フィールドのみアサーションが生成される.
     */
    generateAssertionsForAllFields = false

    /*
     * Assertions クラスを出力するパッケージを指定する.
     * Assertions クラスとは、各ドメインクラスのアサーションの起点となる static メソッドをまとめたクラスのこと.
     */
    entryPointClassPackage = 'foo.assertions'

    /*
     * Assertion クラスを生成するドメインクラスを正規表現で絞り込む.
     */
    includes = [/foo\.bar\.Fizz.*/]

    /*
     * Assertion クラスを生成しないドメインクラスを正規表現で絞り込む.
     */
    excludes = [/foo\.bar\.Buzz.*/]

    /*
     * 生成されたファイルの出力先ディレクトリを指定する.
     * デフォルトは "${buildDir}/generated-test-sources/assertj-assertions".
     */
    targetDir = "${buildDir}/foo/bar"

    /*
     * ファイルを生成する前に targetDir を削除するかどうかを指定する.
     * true の場合は毎回 targetDir を削除する.
     * デフォルトは false.
     */
    cleanTargetDir = true

    /*
     * 各ドメインクラスに対応する Assert クラスの出力先パッケージを指定する.
     * 未指定の場合はドメインクラスと同じパッケージに出力される.
     */
    generateAssertionsInPackage = 'foo.my.assertions'

    /*
     * Assertions クラスを出力するかどうか.
     * デフォルトは true.
     */
    generateAssertions = true

    /*
     * BddAssertions クラスを出力するかどうか.
     * デフォルトは true.
     */
    generateBddAssertions = true

    /*
     * SoftAssertions クラスを出力するかどうか.
     * デフォルトは true.
     */
    generateSoftAssertions = true

    /*
     * JUnitSoftAssertions クラスを出力するかどうか.
     * デフォルトは true.
     */
    generateJUnitSoftAssertions = true

    /*
     * 出力したファイルのスコープを指定する.
     * 'test' または 'compile' のいずれかを指定する.
     * デフォルトは 'test'.
     * 注:ここでのスコープとは、 Maven におけるスコープのことです.
     */
    generatedSourcesScope = 'test'

    /*
     * true を設定すると、 Maven プラグインが出力するログを表示しないようにする.
     * デフォルトは false (表示される).
     */
    quiet = false

    /*
     * プラグインの動作結果を、ここで指定したファイルにテキスト形式で出力する.
     * 未指定の場合は何も出力しない.
     */
    writeReportInFile = "${buildDir}/report.txt"

    /*
     * true を指定した場合、このプラグインの動作をスキップする(何も出力しなくなる).
     * デフォルトは false.
     */
    skip = false

    /*
     * テンプレートファイルを変更する場合に指定する.
     */
    templates {
        /*
         * カスタムのテンプレートファイルが存在するディレクトリを指定する.
         */
        templatesDirectory = 'src/test/resources/tesmplates/'

        /*
         * テンプレートファイルごとに、 templatesDirectory からのパスを指定する.
         * ここでは objectAssertion のテンプレートファイルを指定している.
         * 他のテンプレートを変更する場合は、それぞれの名前でファイルのパスを指定する.
         * 詳細は下記公式ドキュメントを参照のこと.
         * http://joel-costigliola.github.io/assertj/assertj-assertions-generator-maven-plugin.html#custom-templates
         */
        objectAssertion = 'custom_object_assertion.txt'
    }
}

より詳細な説明については、公式のドキュメントを参照してください。

Gradle プラグインが追加で提供しているオプション

Maven プラグインが提供していない、 Gradle プラグイン固有の設定が一部追加されています.

configurations

assertjGen {
    packages = ["sample"]
    configurations = ['customconfiguration']
}

configurations {
    customconfiguration {
        canBeResolved = true
    }
}

dependencies {
    customconfiguration "org.antlr:antlr4-runtime:4.7"
}

compile, testCompile 以外の configuration を追加したい場合に、 List 形式で指定します.
このとき、追加の configurations には canBeResolved = true を指定してください.

sourceSets

sourceSets {
    api.java.srcDir { "src/api/java" }
}

assertjGen {
    packages = ['sample']
    sourceSets = ['api']
}

tasks.assertjGen.dependsOn('compileApiJava')

main, test 以外の sourceSet を追加したい場合に、 List 形式で指定します.

このとき、 assertjGen タスクが実行される前に当該 sourceSet がコンパイルされている必要があります.
従って、 assertjGen の依存タスクに追加したい sourceSet のコンパイルタスクを設定してください.

IDE で使用する

IntelliJ IDEA のような IDE で自動生成された Assertion クラスを使う場合、 IDE にそれらのクラスを認識させる必要があります.

そのままでは、 Assertion クラスのクラスパスへの追加は assertjGen タスクの実行時にだけ行われます.
つまり、 IDE は Assertion クラスを認識できません.

IDE に Assertion クラスを認識させるためには、 Assertion クラスの出力先ディレクトリをクラスパスに追加するように設定を修正します.

assertjGen {
    packages = ["sample"]
}

sourceSets {
    test {
        java {
           srcDirs assertjGen.resolveTargetDir(project)
        }
    }
}

sourceSets の設定で、 test.java のソースディレクトリに Assertion クラスの出力先を追加します.
このとき、 assertjGen.resolveTargetDir(project) を指定することで、 Assertion クラスの出力先のパスを取得できます.

これで、 IDE も自動生成された Assertion クラスを認識できるようになるはずです.

リリースノート

  • v2.0.0 (2017-12-10)
    • 初回リリース
    • Maven プラグインを完全にラップした形で再作成.