Teaches AI agents to write idiomatic Kotlin instead of Java-in-a-.kt-file.
98
98%
Does it follow best practices?
Impact
99%
1.20xAverage score across 8 eval scenarios
Passed
No known issues
Process steps in order. Do not skip ahead.
src/test/**/*.kt and identify files containing JUnit imports (org.junit.jupiter.api.*, org.junit.Assert.*) or assertion calls (assertEquals, assertTrue, assertFalse, assertNull, assertNotNull, assertThrows)For each file:
@Test methods inside a class, or top-level functions)assertEquals(expected, actual) → actual shouldBe expectedassertTrue(condition) → condition.shouldBeTrue() or condition shouldBe trueassertFalse(condition) → condition.shouldBeFalse() or condition shouldBe falseassertNull(value) → value.shouldBeNull()assertNotNull(value) → value.shouldNotBeNull()assertThrows<E> { … } → shouldThrow<E> { … }assertEquals(expected, actual, "msg") → withClue("msg") { actual shouldBe expected }DescribeSpec when the existing tests are grouped by behavior (describe("when X") { it("does Y") { … } })BehaviorSpec when the existing tests follow given/when/then namingStringSpec when tests are flat and self-describing — simplest mechanical conversionStringSpec for mechanical conversions; only escalate to DescribeSpec / BehaviorSpec when there's real grouping to preserveclass FooTest becomes class FooTest : StringSpec({ … }) (or the chosen spec)@Test fun something() into a string block: "something" { … }@Test, @BeforeEach, @AfterEach, @Disabled annotations — replace lifecycle hooks with Kotest's beforeEach { … } / afterEach { … } / extension registrations inside the spec bodyorg.junit.jupiter.api.*, org.junit.Assert.*, kotlin.test.* (if mixed)io.kotest.core.spec.style.<SpecStyle> for the chosen spec, io.kotest.matchers.shouldBe, io.kotest.matchers.shouldNotBe, io.kotest.assertions.throwables.shouldThrow, and any matcher-specific imports your assertions need (io.kotest.matchers.nulls.*, io.kotest.matchers.booleans.*)./gradlew testClasses or equivalent)import, wrong matcher (e.g., shouldBe instead of shouldContain for a collection check), spec style mismatchscripts/verify-no-junit-assertions.shFinish here. Do not commit or push — that's the operator's call.