🙆
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
Discussion