@@ -21,7 +21,6 @@ import org.utbot.framework.codegen.model.constructor.util.CgStatementConstructor
2121import org.utbot.framework.codegen.model.tree.CgAuxiliaryClass
2222import org.utbot.framework.codegen.model.tree.CgExecutableUnderTestCluster
2323import org.utbot.framework.codegen.model.tree.CgMethod
24- import org.utbot.framework.codegen.model.tree.CgParameterDeclaration
2524import org.utbot.framework.codegen.model.tree.CgRegion
2625import org.utbot.framework.codegen.model.tree.CgSimpleRegion
2726import org.utbot.framework.codegen.model.tree.CgStaticsRegion
@@ -37,7 +36,6 @@ import org.utbot.framework.codegen.model.tree.buildTestClassBody
3736import org.utbot.framework.codegen.model.tree.buildTestClassFile
3837import org.utbot.framework.codegen.model.visitor.importUtilMethodDependencies
3938import org.utbot.framework.plugin.api.ClassId
40- import org.utbot.framework.plugin.api.ExecutableId
4139import org.utbot.framework.plugin.api.MethodId
4240import org.utbot.framework.plugin.api.UtExecutionSuccess
4341import org.utbot.framework.plugin.api.UtMethodTestSet
@@ -140,45 +138,18 @@ internal class CgTestClassConstructor(val context: CgContext) :
140138 .filter { it.result is UtExecutionSuccess }
141139 .map { (it.result as UtExecutionSuccess ).model }
142140
143- val (methodUnderTest, _, _, clustersInfo) = testSet
144141 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)
162142
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+ )
180151 }
181- }
152+ }.onFailure { e -> processFailure(testSet, e) }
182153
183154 val errors = testSet.allErrors
184155 if (errors.isNotEmpty()) {
@@ -195,29 +166,61 @@ internal class CgTestClassConstructor(val context: CgContext) :
195166 .merge(failure.description, 1 , Int ::plus)
196167 }
197168
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+
198191 private fun createParametrizedTestAndDataProvider (
199192 testSet : CgMethodTestSet ,
200- requiredFields : MutableList <CgParameterDeclaration >,
201- regions : MutableList <CgRegion <CgMethod >>,
202- methodUnderTest : ExecutableId ,
193+ regions : MutableList <CgRegion <CgMethod >>
203194 ) {
204- runCatching {
205- val dataProviderMethodName = nameGenerator.dataProviderMethodNameFor(testSet.executableId)
195+ val (methodUnderTest, _, _, _) = testSet
206196
207- val parameterizedTestMethod =
208- methodConstructor.createParameterizedTestMethod(testSet, dataProviderMethodName )
197+ for (preparedTestSet in testSet.prepareTestSetsForParameterizedTestGeneration()) {
198+ val dataProviderMethodName = nameGenerator.dataProviderMethodNameFor(preparedTestSet.executableId )
209199
210- requiredFields + = parameterizedTestMethod.requiredFields
200+ val parameterizedTestMethod =
201+ methodConstructor.createParameterizedTestMethod(preparedTestSet, dataProviderMethodName)
211202
212203 testFrameworkManager.addDataProvider(
213- methodConstructor.createParameterizedTestDataProvider(testSet , dataProviderMethodName)
204+ methodConstructor.createParameterizedTestDataProvider(preparedTestSet , dataProviderMethodName)
214205 )
215206
216207 regions + = CgSimpleRegion (
217208 " Parameterized test for method ${methodUnderTest.humanReadableName} " ,
218209 listOf (parameterizedTestMethod),
219210 )
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+ )
221224 }
222225
223226 /* *
0 commit comments