@@ -21,7 +21,6 @@ import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor
21
21
import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass
22
22
import org.utbot.framework.codegen.model.tree.CgExecutableUnderTestCluster
23
23
import org.utbot.framework.codegen.model.tree.CgMethod
24
- import org.utbot.framework.codegen.model.tree.CgParameterDeclaration
25
24
import org.utbot.framework.codegen.model.tree.CgRegion
26
25
import org.utbot.framework.codegen.model.tree.CgSimpleRegion
27
26
import org.utbot.framework.codegen.model.tree.CgStaticsRegion
@@ -37,7 +36,6 @@ import org.utbot.framework.codegen.model.tree.buildTestClassBody
37
36
import org.utbot.framework.codegen.model.tree.buildTestClassFile
38
37
import org.utbot.framework.codegen.model.visitor.importUtilMethodDependencies
39
38
import org.utbot.framework.plugin.api.ClassId
40
- import org.utbot.framework.plugin.api.ExecutableId
41
39
import org.utbot.framework.plugin.api.MethodId
42
40
import org.utbot.framework.plugin.api.UtExecutionSuccess
43
41
import org.utbot.framework.plugin.api.UtMethodTestSet
@@ -140,45 +138,18 @@ internal class CgTestClassConstructor(val context: CgContext) :
140
138
.filter { it.result is UtExecutionSuccess }
141
139
.map { (it.result as UtExecutionSuccess ).model }
142
140
143
- val (methodUnderTest, _, _, clustersInfo) = testSet
144
141
val regions = mutableListOf<CgRegion <CgMethod >>()
145
- val requiredFields = mutableListOf<CgParameterDeclaration >()
146
-
147
- when (context.parametrizedTestSource) {
148
- ParametrizedTestSource .DO_NOT_PARAMETRIZE -> {
149
- for ((clusterSummary, executionIndices) in clustersInfo) {
150
- val currentTestCaseTestMethods = mutableListOf<CgTestMethod >()
151
- emptyLineIfNeeded()
152
- for (i in executionIndices) {
153
- runCatching {
154
- currentTestCaseTestMethods + = methodConstructor.createTestMethod(methodUnderTest, testSet.executions[i])
155
- }.onFailure { e -> processFailure(testSet, e) }
156
- }
157
- val clusterHeader = clusterSummary?.header
158
- val clusterContent = clusterSummary?.content
159
- ?.split(' \n ' )
160
- ?.let { CgTripleSlashMultilineComment (it) }
161
- regions + = CgTestMethodCluster (clusterHeader, clusterContent, currentTestCaseTestMethods)
162
142
163
- testsGenerationReport.addTestsByType(testSet, currentTestCaseTestMethods)
164
- }
165
- }
166
- ParametrizedTestSource .PARAMETRIZE -> {
167
- // Mocks are not supported in parametrized tests, we should exclude them
168
- val testSetWithoutMocking = testSet.excludeExecutionsWithMocking()
169
-
170
- for (splitByExecutionTestSet in testSetWithoutMocking.splitExecutionsByResult()) {
171
- for (splitByChangedStaticsTestSet in splitByExecutionTestSet.splitExecutionsByChangedStatics()) {
172
- createParametrizedTestAndDataProvider(
173
- splitByChangedStaticsTestSet,
174
- requiredFields,
175
- regions,
176
- methodUnderTest
177
- )
178
- }
179
- }
143
+ runCatching {
144
+ when (context.parametrizedTestSource) {
145
+ ParametrizedTestSource .DO_NOT_PARAMETRIZE -> createTest(testSet, regions)
146
+ ParametrizedTestSource .PARAMETRIZE ->
147
+ createParametrizedTestAndDataProvider(
148
+ testSet,
149
+ regions
150
+ )
180
151
}
181
- }
152
+ }.onFailure { e -> processFailure(testSet, e) }
182
153
183
154
val errors = testSet.allErrors
184
155
if (errors.isNotEmpty()) {
@@ -195,29 +166,61 @@ internal class CgTestClassConstructor(val context: CgContext) :
195
166
.merge(failure.description, 1 , Int ::plus)
196
167
}
197
168
169
+ private fun createTest (
170
+ testSet : CgMethodTestSet ,
171
+ regions : MutableList <CgRegion <CgMethod >>
172
+ ) {
173
+ val (methodUnderTest, _, _, clustersInfo) = testSet
174
+
175
+ for ((clusterSummary, executionIndices) in clustersInfo) {
176
+ val currentTestCaseTestMethods = mutableListOf<CgTestMethod >()
177
+ emptyLineIfNeeded()
178
+ for (i in executionIndices) {
179
+ currentTestCaseTestMethods + = methodConstructor.createTestMethod(methodUnderTest, testSet.executions[i])
180
+ }
181
+ val clusterHeader = clusterSummary?.header
182
+ val clusterContent = clusterSummary?.content
183
+ ?.split(' \n ' )
184
+ ?.let { CgTripleSlashMultilineComment (it) }
185
+ regions + = CgTestMethodCluster (clusterHeader, clusterContent, currentTestCaseTestMethods)
186
+
187
+ testsGenerationReport.addTestsByType(testSet, currentTestCaseTestMethods)
188
+ }
189
+ }
190
+
198
191
private fun createParametrizedTestAndDataProvider (
199
192
testSet : CgMethodTestSet ,
200
- requiredFields : MutableList <CgParameterDeclaration >,
201
- regions : MutableList <CgRegion <CgMethod >>,
202
- methodUnderTest : ExecutableId ,
193
+ regions : MutableList <CgRegion <CgMethod >>
203
194
) {
204
- runCatching {
205
- val dataProviderMethodName = nameGenerator.dataProviderMethodNameFor(testSet.executableId)
195
+ val (methodUnderTest, _, _, _) = testSet
206
196
207
- val parameterizedTestMethod =
208
- methodConstructor.createParameterizedTestMethod(testSet, dataProviderMethodName )
197
+ for (preparedTestSet in testSet.prepareTestSetsForParameterizedTestGeneration()) {
198
+ val dataProviderMethodName = nameGenerator.dataProviderMethodNameFor(preparedTestSet.executableId )
209
199
210
- requiredFields + = parameterizedTestMethod.requiredFields
200
+ val parameterizedTestMethod =
201
+ methodConstructor.createParameterizedTestMethod(preparedTestSet, dataProviderMethodName)
211
202
212
203
testFrameworkManager.addDataProvider(
213
- methodConstructor.createParameterizedTestDataProvider(testSet , dataProviderMethodName)
204
+ methodConstructor.createParameterizedTestDataProvider(preparedTestSet , dataProviderMethodName)
214
205
)
215
206
216
207
regions + = CgSimpleRegion (
217
208
" Parameterized test for method ${methodUnderTest.humanReadableName} " ,
218
209
listOf (parameterizedTestMethod),
219
210
)
220
- }.onFailure { error -> processFailure(testSet, error) }
211
+ }
212
+
213
+ // We cannot track mocking in fuzzed executions, so we generate standard tests for them
214
+ // [https://github.com/UnitTestBot/UTBotJava/issues/1137]
215
+ val testCaseTestMethods = mutableListOf<CgTestMethod >()
216
+ for (execution in testSet.prepareFuzzedExecutions().executions) {
217
+ testCaseTestMethods + = methodConstructor.createTestMethod(methodUnderTest, execution)
218
+ }
219
+
220
+ regions + = CgSimpleRegion (
221
+ " FUZZER: EXECUTIONS for method ${methodUnderTest.humanReadableName} " ,
222
+ testCaseTestMethods,
223
+ )
221
224
}
222
225
223
226
/* *
0 commit comments