Code snippets employed to ensure the uniformity of tests written with JUnit library.
1. Classes With Test Annotation Should Have Test Suffix
@Testfun`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
@Testfun`test classes should have test subject named sut`() { Konsist .scopeFromTest() .classes() .assertTrue {// Get type name from test class e.g. FooTest -> Fooval 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
@Testfun`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
@Testfun`no class should use JUnit4 Test annotation`() { Konsist .scopeFromProject() .classes() .functions() .assertFalse { it.annotations.any { annotation->annotation.fullyQualifiedName =="org.junit.Test" } }}