1
+ package com.baeldung.obtainKclassFromPackageClassName
2
+
3
+ import io.github.classgraph.ClassGraph
4
+ import io.github.classgraph.ClassInfo
5
+ import org.junit.jupiter.api.Test
6
+ import org.junit.jupiter.api.assertThrows
7
+ import kotlin.reflect.KClass
8
+ import kotlin.test.assertEquals
9
+ import kotlin.test.assertNull
10
+
11
+ class GetKclassUnitTest {
12
+
13
+ @Test
14
+ fun `obtain the Kclass from Package Class name using forName method` () {
15
+ val className = " com.baeldung.obtainKclassFromPackageClassName.ClassExample"
16
+
17
+ val kClass = getClassUsingForName(className)
18
+
19
+ assertEquals(ClassExample ::class , kClass)
20
+ }
21
+
22
+ @Test
23
+ fun `obtain the Kclass from Package Class name using forName method and non-existing class` () {
24
+ val notClass = " com.baeldung.obtainKclassFromPackageClassName.NotAClass"
25
+
26
+ val exception = assertThrows<ClassNotFoundException > {
27
+ getClassUsingForName(notClass)
28
+ }
29
+
30
+ assertEquals(" com.baeldung.obtainKclassFromPackageClassName.NotAClass" , exception.message)
31
+
32
+ }
33
+
34
+ @Test
35
+ fun `obtain the Kclass from Package Class name using class loader` () {
36
+ val className = " com.baeldung.obtainKclassFromPackageClassName.ClassExample"
37
+
38
+ val kClass = getClassFromLoader(className)
39
+
40
+ assertEquals(ClassExample ::class , kClass)
41
+ }
42
+
43
+ @Test
44
+ fun `obtain the Kclass from Package Class name using class loader and non-existing class` () {
45
+ val notClass = " com.baeldung.obtainKclassFromPackageClassName.NotAClass"
46
+
47
+ val exception = assertThrows<ClassNotFoundException > {
48
+ getClassFromLoader(notClass)
49
+ }
50
+
51
+ assertEquals(" com.baeldung.obtainKclassFromPackageClassName.NotAClass" , exception.message)
52
+ }
53
+
54
+ @Test
55
+ fun `obtain the Kclass from Package Class name using class path` () {
56
+ val className = " com.baeldung.obtainKclassFromPackageClassName.ClassExample"
57
+ val kClass = getClassUsingClassGraph(className)
58
+
59
+ assertEquals(ClassExample ::class , kClass)
60
+ }
61
+
62
+ @Test
63
+ fun `obtain the Kclass from Package Class name using class path and non-existing class` () {
64
+ val notClass = " com.baeldung.obtainKclassFromPackageClassName.NotAClass"
65
+
66
+ val kClass = getClassUsingClassGraph(notClass)
67
+ assertNull(kClass)
68
+ }
69
+ }
70
+
71
+ fun getClassUsingForName (className : String ): KClass <* >? {
72
+ return Class .forName(className).kotlin
73
+ }
74
+
75
+ fun getClassFromLoader (className : String ): KClass <* >? {
76
+ return ClassLoader .getSystemClassLoader().loadClass(className).kotlin
77
+ }
78
+
79
+ fun getClassUsingClassGraph (className : String ): KClass <* >? {
80
+ val classInfo: ClassInfo ? = ClassGraph ()
81
+ .addClassLoader(ClassLoader .getSystemClassLoader())
82
+ .enableClassInfo()
83
+ .scan()
84
+ .getClassInfo(className)
85
+ return classInfo?.loadClass()?.kotlin
86
+ }
0 commit comments