diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt index d4f3363d0b..408756e25f 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt @@ -71,7 +71,7 @@ class GenerateTestsAndSarifReportFacade( private fun generateTestCases(targetClass: TargetClassWrapper, workingDirectory: Path): List = TestCaseGenerator.generate( - targetClass.targetMethods(), + targetClass.targetMethods, sarifProperties.mockStrategy, sarifProperties.classesToMockAlways, sarifProperties.generationTimeout diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt index 46e65a514a..a8a633ec0d 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt @@ -39,6 +39,11 @@ interface SarifExtensionProvider { */ val markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean + /** + * Generate tests for private methods or not. + */ + val testPrivateMethods: Boolean + val testFramework: TestFramework val mockFramework: MockFramework diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/TargetClassWrapper.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/TargetClassWrapper.kt index e0e51c2ed7..a2c2698ca9 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/TargetClassWrapper.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/TargetClassWrapper.kt @@ -1,6 +1,7 @@ package org.utbot.framework.plugin.sarif import org.utbot.framework.plugin.api.UtMethod +import org.utbot.framework.plugin.api.util.executableId import java.io.File import kotlin.reflect.KCallable import kotlin.reflect.KClass @@ -14,13 +15,23 @@ data class TargetClassWrapper( val classUnderTest: KClass<*>, val sourceCodeFile: File, val testsCodeFile: File, - val sarifReportFile: File + val sarifReportFile: File, + val testPrivateMethods: Boolean = false ) { /** * Returns the methods of the class [classUnderTest] declared by the user. */ - fun targetMethods() = - classUnderTest.java.declaredMethods.map { + val targetMethods: List> = run { + val allDeclaredMethods = classUnderTest.java.declaredMethods + val neededDeclaredMethods = if (testPrivateMethods) { + allDeclaredMethods.toList() + } else { + allDeclaredMethods.filter { + !it.executableId.isPrivate + } + } + neededDeclaredMethods.map { UtMethod(it.kotlinFunction as KCallable<*>, classUnderTest) } + } } \ No newline at end of file diff --git a/utbot-gradle/docs/utbot-gradle.md b/utbot-gradle/docs/utbot-gradle.md index 9a66118212..6284b72068 100644 --- a/utbot-gradle/docs/utbot-gradle.md +++ b/utbot-gradle/docs/utbot-gradle.md @@ -40,6 +40,7 @@ __Groovy:__ generatedTestsRelativeRoot = 'build/generated/test' sarifReportsRelativeRoot = 'build/generated/sarif' markGeneratedTestsDirectoryAsTestSourcesRoot = true + testPrivateMethods = false testFramework = 'junit5' mockFramework = 'mockito' generationTimeout = 60000L @@ -58,6 +59,7 @@ __Kotlin DSL:__ generatedTestsRelativeRoot.set("build/generated/test") sarifReportsRelativeRoot.set("build/generated/sarif") markGeneratedTestsDirectoryAsTestSourcesRoot.set(true) + testPrivateMethods.set(false) testFramework.set("junit5") mockFramework.set("mockito") generationTimeout.set(60000L) @@ -78,6 +80,7 @@ generateTestsAndSarifReport -PprojectRoot='C:/.../SomeDirectory' -PgeneratedTestsRelativeRoot='build/generated/test' -PsarifReportsRelativeRoot='build/generated/sarif' + -PtestPrivateMethods='false' -PtestFramework=junit5 -PmockFramework=mockito -PgenerationTimeout=60000 @@ -112,6 +115,10 @@ generateTestsAndSarifReport - Mark the directory with generated tests as `test sources root` or not. - By default, `true` is used. +- `testPrivateMethods`– + - Generate tests for private methods or not. + - By default, `false` is used. + - `testFramework` – - The name of the test framework to be used. - Can be one of: diff --git a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtension.kt b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtension.kt index 1ebbc1dfda..7737836899 100644 --- a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtension.kt +++ b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtension.kt @@ -43,6 +43,12 @@ abstract class SarifGradleExtension { @get:Input abstract val markGeneratedTestsDirectoryAsTestSourcesRoot: Property + /** + * Generate tests for private methods or not. + */ + @get:Input + abstract val testPrivateMethods: Property + /** * Can be one of: 'junit4', 'junit5', 'testng'. */ diff --git a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt index 0784115db8..0464a51b28 100644 --- a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt +++ b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt @@ -52,6 +52,11 @@ class SarifGradleExtensionProvider( get() = extension.markGeneratedTestsDirectoryAsTestSourcesRoot.orNull ?: true + override val testPrivateMethods: Boolean + get() = taskParameters["testPrivateMethods"]?.let { it == "true"} + ?: extension.testPrivateMethods.orNull + ?: false + override val testFramework: TestFramework get() = (taskParameters["testFramework"] ?: extension.testFramework.orNull) ?.let(::testFrameworkParse) diff --git a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapper.kt b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapper.kt index 47dff001b8..2b306a514c 100644 --- a/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapper.kt +++ b/utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapper.kt @@ -90,7 +90,8 @@ class SourceSetWrapper( classUnderTest, sourceCodeFile, createTestsCodeFile(classFqn), - createSarifReportFile(classFqn) + createSarifReportFile(classFqn), + parentProject.sarifProperties.testPrivateMethods ) } diff --git a/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt b/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt index d52610a6b6..8db032a787 100644 --- a/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt +++ b/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt @@ -211,6 +211,43 @@ class SarifGradleExtensionProviderTest { } } + @Nested + @DisplayName("testPrivateMethods") + inner class TestPrivateMethodsTest { + @Test + fun `should be false by default`() { + setTestPrivateMethodsInExtension(null) + assertEquals(false, extensionProvider.testPrivateMethods) + } + + @Test + fun `should be provided from the extension`() { + setTestPrivateMethodsInExtension(true) + assertEquals(true, extensionProvider.testPrivateMethods) + } + + @Test + fun `should be provided from the task parameters`() { + setTestPrivateMethodsInTaskParameters(true) + assertEquals(true, extensionProvider.testPrivateMethods) + } + + @Test + fun `should be provided from the task parameters, not from the extension`() { + setTestPrivateMethodsInTaskParameters(false) + setTestPrivateMethodsInExtension(true) + assertEquals(false, extensionProvider.testPrivateMethods) + } + + private fun setTestPrivateMethodsInExtension(value: Boolean?) { + Mockito.`when`(extensionMock.testPrivateMethods).thenReturn(createBooleanProperty(value)) + } + + private fun setTestPrivateMethodsInTaskParameters(value: Boolean) { + extensionProvider.taskParameters = mapOf("testPrivateMethods" to "$value") + } + } + @Nested @DisplayName("testFramework") inner class TestFrameworkTest { diff --git a/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapperTest.kt b/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapperTest.kt index 5a98a7354c..e315c3021c 100644 --- a/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapperTest.kt +++ b/utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapperTest.kt @@ -30,6 +30,7 @@ class SourceSetWrapperTest { Mockito.`when`(sarifPropertiesMock.codegenLanguage).thenReturn(CodegenLanguage.JAVA) Mockito.`when`(sarifPropertiesMock.generatedTestsRelativeRoot).thenReturn("test") Mockito.`when`(sarifPropertiesMock.sarifReportsRelativeRoot).thenReturn("sarif") + Mockito.`when`(sarifPropertiesMock.testPrivateMethods).thenReturn(true) val gradleProject = GradleProjectWrapper(project, sarifPropertiesMock) val sourceSetWrapper = SourceSetWrapper(project.mainSourceSet, gradleProject) @@ -47,6 +48,7 @@ class SourceSetWrapperTest { Mockito.`when`(sarifPropertiesMock.codegenLanguage).thenReturn(CodegenLanguage.JAVA) Mockito.`when`(sarifPropertiesMock.generatedTestsRelativeRoot).thenReturn("test") Mockito.`when`(sarifPropertiesMock.sarifReportsRelativeRoot).thenReturn("sarif") + Mockito.`when`(sarifPropertiesMock.testPrivateMethods).thenReturn(true) val gradleProject = GradleProjectWrapper(project, sarifPropertiesMock) val sourceSetWrapper = SourceSetWrapper(project.mainSourceSet, gradleProject) @@ -66,6 +68,7 @@ class SourceSetWrapperTest { Mockito.`when`(sarifPropertiesMock.generatedTestsRelativeRoot).thenReturn("test") Mockito.`when`(sarifPropertiesMock.sarifReportsRelativeRoot).thenReturn("sarif") + Mockito.`when`(sarifPropertiesMock.testPrivateMethods).thenReturn(true) val gradleProject = GradleProjectWrapper(project, sarifPropertiesMock) val sourceSetWrapper = SourceSetWrapper(project.mainSourceSet, gradleProject) @@ -79,6 +82,7 @@ class SourceSetWrapperTest { Mockito.`when`(sarifPropertiesMock.generatedTestsRelativeRoot).thenReturn("test") Mockito.`when`(sarifPropertiesMock.sarifReportsRelativeRoot).thenReturn("sarif") + Mockito.`when`(sarifPropertiesMock.testPrivateMethods).thenReturn(true) val gradleProject = GradleProjectWrapper(project, sarifPropertiesMock) val sourceSetWrapper = SourceSetWrapper(project.mainSourceSet, gradleProject) diff --git a/utbot-maven/docs/utbot-maven.md b/utbot-maven/docs/utbot-maven.md index d0949de8ca..33dc3a7af9 100644 --- a/utbot-maven/docs/utbot-maven.md +++ b/utbot-maven/docs/utbot-maven.md @@ -40,6 +40,7 @@ For example, the following configuration may be used: target/generated/test target/generated/sarif true + false junit5 mockito 60000L @@ -79,6 +80,10 @@ For example, the following configuration may be used: - Mark the directory with generated tests as `test sources root` or not. - By default, `true` is used. +- `testPrivateMethods`– + - Generate tests for private methods or not. + - By default, `false` is used. + - `testFramework` – - The name of the test framework to be used. - Can be one of: diff --git a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/GenerateTestsAndSarifReportMojo.kt b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/GenerateTestsAndSarifReportMojo.kt index 3728b39162..bedc8b9c41 100644 --- a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/GenerateTestsAndSarifReportMojo.kt +++ b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/GenerateTestsAndSarifReportMojo.kt @@ -71,6 +71,12 @@ class GenerateTestsAndSarifReportMojo : AbstractMojo() { @Parameter(defaultValue = "true") internal var markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean = true + /** + * Generate tests for private methods or not. + */ + @Parameter(defaultValue = "false") + internal var testPrivateMethods: Boolean = false + /** * Can be one of: 'junit4', 'junit5', 'testng'. */ diff --git a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt index 985308fc0a..7864898ad1 100644 --- a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt +++ b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt @@ -33,6 +33,9 @@ class SarifMavenConfigurationProvider( override val markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean get() = generateTestsAndSarifReportMojo.markGeneratedTestsDirectoryAsTestSourcesRoot + override val testPrivateMethods: Boolean + get() = generateTestsAndSarifReportMojo.testPrivateMethods + override val testFramework: TestFramework get() = testFrameworkParse(generateTestsAndSarifReportMojo.testFramework) diff --git a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/wrappers/MavenProjectWrapper.kt b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/wrappers/MavenProjectWrapper.kt index bd72310590..99176c11c8 100644 --- a/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/wrappers/MavenProjectWrapper.kt +++ b/utbot-maven/src/main/kotlin/org/utbot/maven/plugin/wrappers/MavenProjectWrapper.kt @@ -125,7 +125,8 @@ class MavenProjectWrapper( classUnderTest, sourceCodeFile, createTestsCodeFile(classFqn), - createSarifReportFile(classFqn) + createSarifReportFile(classFqn), + sarifProperties.testPrivateMethods ) } diff --git a/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt b/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt index a9bcc6317f..3e2663dbf2 100644 --- a/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt +++ b/utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt @@ -52,18 +52,21 @@ class SarifMavenConfigurationProviderTest : AbstractMojoTestCase() { Assertions.assertEquals(true, configurationProvider.markGeneratedTestsDirectoryAsTestSourcesRoot) } + @Test + fun `testPrivateMethods should be provided from the configuration`() { + Assertions.assertEquals(true, configurationProvider.testPrivateMethods) + } + @Test fun `testFramework should be provided from the configuration`() { Assertions.assertEquals(Junit5, configurationProvider.testFramework) } - @Test fun `mockFramework should be provided from the configuration`() { Assertions.assertEquals(MockFramework.MOCKITO, configurationProvider.mockFramework) } - @Test fun `generationTimeout should be provided from the configuration`() { Assertions.assertEquals(10000, configurationProvider.generationTimeout) diff --git a/utbot-maven/src/test/resources/project-to-test/pom.xml b/utbot-maven/src/test/resources/project-to-test/pom.xml index e5e3f239b7..65897fb59f 100644 --- a/utbot-maven/src/test/resources/project-to-test/pom.xml +++ b/utbot-maven/src/test/resources/project-to-test/pom.xml @@ -30,6 +30,7 @@ target/generated/test target/generated/sarif true + true junit5 mockito 10000