🙆

Gradle Multi-Project構成でCircleCIのrerun failed testsを実行する際の設定

に公開

これなに

CircleCIの"rerun failed tests"を有効にしているのですが、Flaky testに出会したので目論見通り"rerun failed tests"を実行したところ、そのテストだけが実行され成功したけど違う理由でエラーになったので、それの対処法を残しておくページです。

起きたエラー

9: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':example2:test'.
> No tests found for given includes: [com.hoge.example1.RerunTest](--tests filter)

原因

CircleCIの"rerun failed tests"を有効にする場合、テストファイルを--testsに全て渡して実行するように構成することになります。
このとき、./gradlew test ~~としていたとしても内部では各gradle subprojectsごとにtestが実行されていきます。
--testsにテストファイルを渡している場合、そのsubprojectに渡したテスト対象が一つも存在しないとエラーになる、というのが原因。(知らんかった)

通常の実行では全部のテストが実行されるから起きない(テストを1つも実装してないsubprojectがいれば起きるけど)ですが、flaky testで1つ2つだけ再実行する場面では起きる。。。

対処方法

Testのtaskに以下の設定を追加しておく


tasks.withType<Test> {
    filter {
        isFailOnNoMatchingTests = false
    }
}

これでテスト対象が1つもなくてもエラーにならないです。
余談ですが、Multi-Project化している場合、Convention Pluginを書くことで設定を1箇所に集められるので、もしConvention Pluginを作ってなければ作って、そこに書いて使うようにすると良いです。

終わりに

はじめ、"Gradle + CircleCIのrerun failed testsを実行する際の設定"として書いてたけど、これMulti-Projectで作らない場合関係ないやつだ・・・ということに気がついてタイトルを変えましたw

Money Forward Developers

Discussion