JUnit Snippets
Code snippets employed to ensure the uniformity of tests written with JUnit library.
1. Classes With Test Annotation Should Have Test Suffix
Test Annotation Should Have Test Suffix@Test
fun `classes with 'Test' Annotation should have 'Test' suffix`() {
    Konsist
        .scopeFromSourceSet("test")
        .classes()
        .filter {
            it.functions().any { func -> func.hasAnnotationOf(Test::class) }
        }
        .assertTrue { it.hasNameEndingWith("Tests") }
}2. Test Classes Should Have Test Subject Named Sut
@Test
fun `test classes should have test subject named sut`() {
    Konsist
        .scopeFromTest()
        .classes()
        .assertTrue {
            // Get type name from test class e.g. FooTest -> Foo
            val type = it.name.removeSuffix("Test")
            val sut = it
                .properties()
                .firstOrNull { property -> property.name == "sut" }
            sut != null && sut.hasTacitType(type)
        }
}3. Test Classes Should Have All Members Private Besides Tests
@Test
fun `test classes should have all members private besides tests`() {
    Konsist
        .scopeFromTest()
        .classes()
        .declarations()
        .filterIsInstance<KoAnnotationProvider>()
        .withoutAnnotationOf(Test::class, ParameterizedTest::class, RepeatedTest::class)
        .filterIsInstance<KoVisibilityModifierProvider>()
        .assertTrue { it.hasPrivateModifier }
}4. No Class Should Use JUnit4 Test Annotation
@Test
fun `no class should use JUnit4 Test annotation`() {
    Konsist
        .scopeFromProject()
        .classes()
        .functions()
        .assertFalse {
            it.annotations.any { annotation ->
                annotation.fullyQualifiedName == "org.junit.Test"
            }
        }
}Last updated