すみむらの独り言

思ったことをぶつぶつ呟いていくブログ

GradleのMulti Projectでjavadocをまとめる

GradleのMulti Projectでjavadocをまとめる

とりあえず調べたものをまとめておく。
gradleマルチプロジェクトのサブプロジェクト全部ひっくるめたjavadocを生成する - もぐてっく

GradleのマルチプロジェクトでJavaDocを一箇所にまとめて出力する - 試したこととか困ったこととか

Gradle で Javadoc API Document を出力する - まくまくGradleノート

どれも決め手に掛ける。

これならいけそうで、実際いけた。
discuss.gradle.org

task aggregatedJavadocs(type: Javadoc, description: 'Generate javadocs from all child projects as if it was a single project', group: 'Documentation') {
	destinationDir = file("$buildDir/docs/javadoc")
	title = "$project.name $version API"
	options.author true
	options.links 'http://docs.spring.io/spring/docs/4.3.x/javadoc-api/', 'http://docs.oracle.com/javase/8/docs/api/', 'http://docs.spring.io/spring-ws/docs/2.3.0.RELEASE/api/', 'http://docs.spring.io/spring-security/site/docs/4.0.4.RELEASE/apidocs/'
	options.addStringOption 'Xdoclint:none', '-quiet'
	
	subprojects.each { proj ->
		proj.tasks.withType(Javadoc).each { javadocTask ->
			source += javadocTask.source
			classpath += javadocTask.classpath
			excludes += javadocTask.excludes
			includes += javadocTask.includes
		}
	}
}

junit4の階層化をしてみる

junit4の階層化をしてみる

junit4の階層化をして、テスト結果を見やすく、また、テストケースをカテゴライズして管理を楽にできるようにしたかった。
複数階層にすることもできるようだった。

// テストがないクラスにはEnclosedしていく
@RunWith(Enclosed.class)
public class SampleTest {
  @RunWith(Enclosed.class)
  public class 階層1 {
    // 階層化した場合、テストが含まれるクラスはstatic化
    public static class 階層1_1 {
      @Test
      public void テスト1() { }
      @Test
      public void テスト2() { }
    }
    public static class 階層1_2 {
      @Test
      public void テスト1() { }
    }
  }
  @RunWith(Enclosed.class)
  public class 階層2 {
    public static class 階層2_2 {
      @Test
      public void テスト1() { }
      // パラメータテストも@Testの並びに書く
      @RunWith(Theories.class)
      public static class パラメータテストのクラス {
        @DataPoint
        public static int PARAM_1 = 1;
        @Theory
        public void パラメータテスト(int num) { }
      }
    }
  }
}

階層かとパラメータテストを併用できないと思っていましたが、よく確認してないだけでした。
パラメータテストの書き方はこの辺参考に
JUnitにおけるパラメータ化テスト入門 - Qiita

既存のプロジェクトをGradleの環境に移行していく テスト編

動機

テストコードがないレガシーサバンナに投下されたので、ゴリゴリとテスト環境を作っていこうと試行錯誤している。

既存プロジェクトは、jar単位でプロジェクト作成されており、それらがSVNで管理されている。
並行開発や、現行の開発プロセスから各jar(アプリケーション?機能?)の単位でテストコード用のプロジェクトを作成する方針とした。

各jar単位でテストプロジェクトを作成するのはよいのだが、基底となるライブラリ(というか共通化パーツ)を作りたかった。

依存関係が解決できない

プロジェクト間に依存関係を付けてビルドしてみても、パッケージが見つからない的なエラーが出てきてビルドが失敗する。

↓こんな感じで単純にプロジェクトとしてテスト用にImplementationした場合。

dependencies {
    // テスト対象のプロジェクト
    testImplementation project(':AppSubProject1')
    // テスト用の基底プロジェクト
    testImplementation project(':AppSubProject1TestBase')
}

調べてみると引っかかった

調べてみたら記事が見つかりました。
nainaistar.hatenablog.com

記載内容を参考に修正してみるとうまくいきました。

dependencies {
    // テスト対象のプロジェクト
    testImplementation project(':AppSubProject1')
    // テスト用の基底プロジェクト
    testImplementation project(':AppSubProject1TestBase').sourceSets.test.output
}

めでたしめでたし。