Skip to content

Commit b051634

Browse files
authored
Fix DummySpringBootIntegrationTestClass annotations (#2415)
* Fix `DummySpringBootIntegrationTestClass` annotations * Fix annotations in `CgSpringIntegrationTestClassConstructor` * Replace `@RunWith(SpringExtension.class)` with `@RunWith(SpringRunner.class)`
1 parent 1116cbd commit b051634

File tree

3 files changed

+32
-14
lines changed

3 files changed

+32
-14
lines changed

utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/util/SpringModelUtils.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ object SpringModelUtils {
1515
val applicationContextClassId = ClassId("org.springframework.context.ApplicationContext")
1616
val crudRepositoryClassId = ClassId("org.springframework.data.repository.CrudRepository")
1717

18-
@Suppress("unused", "may be used instead of ExtendWith + BootstrapWith in future")
1918
val springBootTestClassId = ClassId("org.springframework.boot.test.context.SpringBootTest")
2019

2120
val dirtiesContextClassId = ClassId("org.springframework.test.annotation.DirtiesContext")
@@ -24,6 +23,8 @@ object SpringModelUtils {
2423
val autoConfigureTestDbClassId = ClassId("org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase")
2524

2625
val runWithClassId = ClassId("org.junit.runner.RunWith")
26+
val springRunnerClassId = ClassId("org.springframework.test.context.junit4.SpringRunner")
27+
2728
val extendWithClassId = ClassId("org.junit.jupiter.api.extension.ExtendWith")
2829
val springExtensionClassId = ClassId("org.springframework.test.context.junit.jupiter.SpringExtension")
2930

utbot-framework/src/main/kotlin/org/utbot/framework/codegen/tree/CgSpringIntegrationTestClassConstructor.kt

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import org.utbot.framework.plugin.api.SpringCodeGenerationContext
1717
import org.utbot.framework.plugin.api.SpringSettings.*
1818
import org.utbot.framework.plugin.api.SpringConfiguration.*
1919
import org.utbot.framework.plugin.api.util.IndentUtil.TAB
20-
import org.utbot.framework.plugin.api.util.SpringModelUtils
2120
import org.utbot.framework.plugin.api.util.SpringModelUtils.activeProfilesClassId
2221
import org.utbot.framework.plugin.api.util.SpringModelUtils.autoConfigureTestDbClassId
2322
import org.utbot.framework.plugin.api.util.SpringModelUtils.autowiredClassId
@@ -26,8 +25,12 @@ import org.utbot.framework.plugin.api.util.SpringModelUtils.contextConfiguration
2625
import org.utbot.framework.plugin.api.util.SpringModelUtils.crudRepositoryClassId
2726
import org.utbot.framework.plugin.api.util.SpringModelUtils.dirtiesContextClassId
2827
import org.utbot.framework.plugin.api.util.SpringModelUtils.dirtiesContextClassModeClassId
28+
import org.utbot.framework.plugin.api.util.SpringModelUtils.extendWithClassId
29+
import org.utbot.framework.plugin.api.util.SpringModelUtils.runWithClassId
30+
import org.utbot.framework.plugin.api.util.SpringModelUtils.springBootTestClassId
2931
import org.utbot.framework.plugin.api.util.SpringModelUtils.springBootTestContextBootstrapperClassId
3032
import org.utbot.framework.plugin.api.util.SpringModelUtils.springExtensionClassId
33+
import org.utbot.framework.plugin.api.util.SpringModelUtils.springRunnerClassId
3134
import org.utbot.framework.plugin.api.util.SpringModelUtils.transactionalClassId
3235
import org.utbot.framework.plugin.api.util.utContext
3336
import org.utbot.spring.api.UTSpringContextLoadingException
@@ -99,23 +102,33 @@ class CgSpringIntegrationTestClassConstructor(
99102
)
100103

101104
private fun addNecessarySpringSpecificAnnotations() {
102-
val springRunnerType = when (testFramework) {
103-
Junit4 -> SpringModelUtils.runWithClassId
104-
Junit5 -> SpringModelUtils.extendWithClassId
105+
val (testFrameworkExtension, springExtension) = when (testFramework) {
106+
Junit4 -> runWithClassId to springRunnerClassId
107+
Junit5 -> extendWithClassId to springExtensionClassId
105108
TestNg -> error("Spring extension is not implemented in TestNg")
106109
else -> error("Trying to generate tests for Spring project with non-JVM framework")
107110
}
108111

109112
addAnnotation(
110-
classId = springRunnerType,
111-
argument = createGetClassExpression(springExtensionClassId, codegenLanguage),
112-
target = Class,
113-
)
114-
addAnnotation(
115-
classId = bootstrapWithClassId,
116-
argument = createGetClassExpression(springBootTestContextBootstrapperClassId, codegenLanguage),
113+
classId = testFrameworkExtension,
114+
argument = createGetClassExpression(springExtension, codegenLanguage),
117115
target = Class,
118116
)
117+
118+
if (utContext.classLoader.tryLoadClass(springBootTestContextBootstrapperClassId.name) != null)
119+
// TODO in somewhat new versions of Spring Boot, @SpringBootTest
120+
// already includes @BootstrapWith(SpringBootTestContextBootstrapper.class),
121+
// so we should avoid adding it manually to reduce number of annotations
122+
addAnnotation(
123+
classId = bootstrapWithClassId,
124+
argument = createGetClassExpression(springBootTestContextBootstrapperClassId, codegenLanguage),
125+
target = Class,
126+
)
127+
128+
if (utContext.classLoader.tryLoadClass(springBootTestClassId.name) != null)
129+
addAnnotation(springBootTestClassId, Class)
130+
131+
// TODO avoid adding @ActiveProfiles(profiles = {"default"}) to reduce number of annotations
119132
addAnnotation(
120133
classId = activeProfilesClassId,
121134
namedArguments =
@@ -132,6 +145,8 @@ class CgSpringIntegrationTestClassConstructor(
132145
),
133146
target = Class,
134147
)
148+
149+
// TODO avoid adding @ContextConfiguration(classes = {$defaultBootConfigClass}) to reduce number of annotations
135150
addAnnotation(
136151
classId = contextConfigurationClassId,
137152
namedArguments =
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package org.utbot.spring.dummy
22

33
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase
4+
import org.springframework.boot.test.context.SpringBootTest
45
import org.springframework.boot.test.context.SpringBootTestContextBootstrapper
56
import org.springframework.test.context.BootstrapWith
67

8+
@SpringBootTest
79
@BootstrapWith(SpringBootTestContextBootstrapper::class)
8-
class DummySpringBootIntegrationTestClass : DummySpringIntegrationTestClass()
10+
open class DummySpringBootIntegrationTestClass : DummySpringIntegrationTestClass()
911

1012
@AutoConfigureTestDatabase
11-
class DummySpringBootIntegrationTestClassAutoconfigTestDB : DummySpringIntegrationTestClass()
13+
class DummySpringBootIntegrationTestClassAutoconfigTestDB : DummySpringBootIntegrationTestClass()

0 commit comments

Comments
 (0)