2017年10月22日日曜日

AssertJ Assertions Generatorを使ってクラス専用のアサーションを生成する

使い方や生成対象などは、AssertJ Assertions Generatorに書かれています。

MavenやGradleプラグインやshを使うパターンがあるみたいですが、Gradleプラグインを使った方法を試してみます。

build.gradle

Gradleプラグインの使い方は、Githubに書かれています。
自動生成したクラスは、置き場所を変えたほうが分かりやすいのでsrc-gen配下に出力しています。
plugins {
  id "com.github.opengl-BOBO.assertjGen" version "1.1.8"
}

// assertj-gen
ext {
  assertjGenPreConfig = [
      'assertjGenerator': 'org.assertj:assertj-assertions-generator:2.1.0',
      'sourceSets': ['main]
  ]
}

sourceSets.test.java.srcDirs += 'src-gen/test/java'

assertjGen {
  // test.Hogeがアサーションを生成するクラス。
  // パッケージ指定もできる
  classOrPackageNames = ['test.Hoge']
  outputDir = 'src-gen/test/java'
}

生成対象のクラス

package test;

public class Hoge {

    public final int hoge;

    public Hoge(final int hoge) {
        this.hoge = hoge;
    }
    
    public String getFuga() {
        return "fuga";
    }
}

アサーションの生成

assertjGenを使用してアサーションを生成します。

$ ./gradlew assertjGen 

> Task :assertjGen
07:22:13.289 INFO  o.a.a.g.c.AssertionGeneratorLauncher - Generating assertions for classes [class test.Hoge]
07:22:13.310 INFO  o.a.a.g.c.AssertionGeneratorLauncher - Generating assertions for class : test.Hoge
07:22:13.326 INFO  o.a.a.g.c.AssertionGeneratorLauncher - Generated Hoge assertions file -> /home/hoge/IdeaProjects/test-pj/src-gen/test/java/./test/HogeAssert.java

生成されたクラス

下の画像のようなアサーションクラスが生成されます。

生成されたクラスを使用する

@Test
void test() {
    final Hoge hoge = new Hoge(100);
    HogeAssert.assertThat(hoge)
            .hasHoge(10);
}

テスト結果もわかりやすく出力されます。
Expecting hoge of:
  <test.Hoge@3c72f59f>
to be:
  <10>
but was:
  <100>