HackToTech

Hack To Technology

test-retry-gradle-pluginで特定のJunit5のNested ClassのRetryを実行させる

公式に書いてなくて探してすぐに見当たらなかったので備忘録

github.com

Nested Classの指定は . ではなく $ でのアクセスになる

# build.gradle.kts
plugins {
    id("org.gradle.test-retry") version "1.4.1"
}
tasks.withType<Test> {
    useJUnitPlatform()

    retry {
        maxRetries.set(3)
        filter {
            includeClasses.add("com.example.app.Test\$InnerClassA")
        }
    }
}

もし配下のNested Classすべてを実行するなら includeClasses.add("com.example.app.Test\$*") とかにする

# Test code
package com.example.app

import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.fail

class Test {
    @Nested
    inner class InnerClassA {
        @Test
        fun `リトライされること`() {
            fail("retry")
        }
    }

    @Nested
    inner class InnerClassB {
        @Test
        fun `リトライされないこと`() {
            fail("not retry")
        }
    }
}

実行結果

$ ./gradlew test

> Task :test

Test > InnerClassA > リトライされること() FAILED
    org.opentest4j.AssertionFailedError at Test.kt:12

Test > InnerClassB > リトライされないこと() FAILED
    org.opentest4j.AssertionFailedError at Test.kt:20

Test > InnerClassA > リトライされること() FAILED
    org.opentest4j.AssertionFailedError at Test.kt:12

Test > InnerClassA > リトライされること() FAILED
    org.opentest4j.AssertionFailedError at Test.kt:12

Test > InnerClassA > リトライされること() FAILED
    org.opentest4j.AssertionFailedError at Test.kt:12

5 tests completed, 5 failed

> Task :test FAILED

FAILURE: Build failed with an exception.

BUILD FAILED in 6s
6 actionable tasks: 2 executed, 4 up-to-date