gradle-icon-512x512

オレオレGradleメモだよー

お仕事ではGroovy 使いかつ、XMLをチマチマ書いていくのが嫌いなので、
Maven や Ant ではなく、Gradle をビルドに使っています。

Java プロジェクトの場合は、プロジェクトのルートに下のような
build.gradle を準備して、Maven と同じ ディレクトレイアウトを
作ってやるだけで良いというのは、なかなか簡単です。

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

あとは依存追加したり、テストカバレッジを計測するために、
gradle-cobertura-plugin を導入したりしています。

課題

実装しているものの都合上、外部システムにHTTPでリクエストして
データを取得するというクラスが結構多いのですが、UnitTest の場合は
大抵、Mock にお願いする感じです。
(テストは Spock で書いていますので、Spock の Mock を活用する感じです。)

でも、たまに実際に、HTTPリクエストして返ってきたものを検証したい
という事もあり、HttpClient を Mock に差し替えず、実際に HTTP リクエストを
投げるテストも書いていたりします。

これを単純に src/test 下で書いてしまうと、 gradle build したときに、ネットワークや
データの都合などで見事にビルドが失敗したりします。
結果、Jenkinsのオッサンはその度に怒り狂い、平謝りをすることになります。

Jenkinsのオッサンには、UnitTest と、IntegrationTest的なものは
別々のタスクとして実行して貰いたい。ということで、新たにタスクを定義したい
わけです。

パッケージで分ける方法

とりあえず、ってことで今はパッケージで分ける方法を使っています。

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    exclude 'net/bucyou/integration/**'
}

task integrationTest(type:Test) {
    include 'net/bucyou/integration/**'
}

これで、 net.bucyou.integration.* にあるテストは build で実行されなくなります。
一方、integrationTest タスクを対象のパッケージ下のみをテストするように定義
しました。これで分離出来ました。

プラグイン使用+新しいディレクトリ分類を作る

よくよく探すと、integration-test plugin がありました。

これを使うと、 src/integration-test/(java|groovy|scala|resources) 
integrationTest のためのディレクトリとして捉えたタスクを追加してくれるっぽいです。

最初からこれ使ってればよかった・・・。

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>