Skip to content

Commit f59e32c

Browse files
committed
Support for excluding private methods in utbot-gradle (#482)
1 parent 4fd423b commit f59e32c

File tree

14 files changed

+98
-8
lines changed

14 files changed

+98
-8
lines changed

utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/GenerateTestsAndSarifReportFacade.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ class GenerateTestsAndSarifReportFacade(
7171

7272
private fun generateTestCases(targetClass: TargetClassWrapper, workingDirectory: Path): List<UtTestCase> =
7373
UtBotTestCaseGenerator.generateForSeveralMethods(
74-
targetClass.targetMethods(),
74+
targetClass.targetMethods,
7575
sarifProperties.mockStrategy,
7676
sarifProperties.classesToMockAlways,
7777
sarifProperties.generationTimeout

utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/SarifExtensionProvider.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ interface SarifExtensionProvider {
3939
*/
4040
val markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean
4141

42+
/**
43+
* Generate tests for private methods or not.
44+
*/
45+
val testPrivateMethods: Boolean
46+
4247
val testFramework: TestFramework
4348

4449
val mockFramework: MockFramework

utbot-framework/src/main/kotlin/org/utbot/framework/plugin/sarif/TargetClassWrapper.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import org.utbot.framework.plugin.api.UtMethod
44
import java.io.File
55
import kotlin.reflect.KCallable
66
import kotlin.reflect.KClass
7+
import kotlin.reflect.KVisibility
78
import kotlin.reflect.jvm.kotlinFunction
89

910
/**
@@ -14,13 +15,22 @@ data class TargetClassWrapper(
1415
val classUnderTest: KClass<*>,
1516
val sourceCodeFile: File,
1617
val testsCodeFile: File,
17-
val sarifReportFile: File
18+
val sarifReportFile: File,
19+
val testPrivateMethods: Boolean = false
1820
) {
1921
/**
2022
* Returns the methods of the class [classUnderTest] declared by the user.
2123
*/
22-
fun targetMethods() =
23-
classUnderTest.java.declaredMethods.map {
24+
val targetMethods: List<UtMethod<*>> = run {
25+
val declaredMethods = classUnderTest.java.declaredMethods.map {
2426
UtMethod(it.kotlinFunction as KCallable<*>, classUnderTest)
2527
}
28+
if (testPrivateMethods) {
29+
declaredMethods
30+
} else {
31+
declaredMethods.filter {
32+
it.callable.visibility != KVisibility.PRIVATE
33+
}
34+
}
35+
}
2636
}

utbot-gradle/docs/utbot-gradle.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ __Groovy:__
4040
generatedTestsRelativeRoot = 'build/generated/test'
4141
sarifReportsRelativeRoot = 'build/generated/sarif'
4242
markGeneratedTestsDirectoryAsTestSourcesRoot = true
43+
testPrivateMethods = false
4344
testFramework = 'junit5'
4445
mockFramework = 'mockito'
4546
generationTimeout = 60000L
@@ -58,6 +59,7 @@ __Kotlin DSL:__
5859
generatedTestsRelativeRoot.set("build/generated/test")
5960
sarifReportsRelativeRoot.set("build/generated/sarif")
6061
markGeneratedTestsDirectoryAsTestSourcesRoot.set(true)
62+
testPrivateMethods.set(false)
6163
testFramework.set("junit5")
6264
mockFramework.set("mockito")
6365
generationTimeout.set(60000L)
@@ -78,6 +80,7 @@ generateTestsAndSarifReport
7880
-PprojectRoot='C:/.../SomeDirectory'
7981
-PgeneratedTestsRelativeRoot='build/generated/test'
8082
-PsarifReportsRelativeRoot='build/generated/sarif'
83+
-PtestPrivateMethods='false'
8184
-PtestFramework=junit5
8285
-PmockFramework=mockito
8386
-PgenerationTimeout=60000
@@ -112,6 +115,10 @@ generateTestsAndSarifReport
112115
- Mark the directory with generated tests as `test sources root` or not.
113116
- By default, `true` is used.
114117

118+
- `testPrivateMethods`&ndash;
119+
- Generate tests for private methods or not.
120+
- By default, `false` is used.
121+
115122
- `testFramework` &ndash;
116123
- The name of the test framework to be used.
117124
- Can be one of:

utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtension.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ abstract class SarifGradleExtension {
4343
@get:Input
4444
abstract val markGeneratedTestsDirectoryAsTestSourcesRoot: Property<Boolean>
4545

46+
/**
47+
* Generate tests for private methods or not.
48+
*/
49+
@get:Input
50+
abstract val testPrivateMethods: Property<Boolean>
51+
4652
/**
4753
* Can be one of: 'junit4', 'junit5', 'testng'.
4854
*/

utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProvider.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ class SarifGradleExtensionProvider(
5252
get() = extension.markGeneratedTestsDirectoryAsTestSourcesRoot.orNull
5353
?: true
5454

55+
override val testPrivateMethods: Boolean
56+
get() = taskParameters["testPrivateMethods"]?.let { it == "true"}
57+
?: extension.testPrivateMethods.orNull
58+
?: false
59+
5560
override val testFramework: TestFramework
5661
get() = (taskParameters["testFramework"] ?: extension.testFramework.orNull)
5762
?.let(::testFrameworkParse)

utbot-gradle/src/main/kotlin/org/utbot/gradle/plugin/wrappers/SourceSetWrapper.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ class SourceSetWrapper(
9090
classUnderTest,
9191
sourceCodeFile,
9292
createTestsCodeFile(classFqn),
93-
createSarifReportFile(classFqn)
93+
createSarifReportFile(classFqn),
94+
parentProject.sarifProperties.testPrivateMethods
9495
)
9596
}
9697

utbot-gradle/src/test/kotlin/org/utbot/gradle/plugin/extension/SarifGradleExtensionProviderTest.kt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,43 @@ class SarifGradleExtensionProviderTest {
211211
}
212212
}
213213

214+
@Nested
215+
@DisplayName("testPrivateMethods")
216+
inner class TestPrivateMethodsTest {
217+
@Test
218+
fun `should be false by default`() {
219+
setTestPrivateMethodsInExtension(null)
220+
assertEquals(false, extensionProvider.testPrivateMethods)
221+
}
222+
223+
@Test
224+
fun `should be provided from the extension`() {
225+
setTestPrivateMethodsInExtension(true)
226+
assertEquals(true, extensionProvider.testPrivateMethods)
227+
}
228+
229+
@Test
230+
fun `should be provided from the task parameters`() {
231+
setTestPrivateMethodsInTaskParameters(true)
232+
assertEquals(true, extensionProvider.testPrivateMethods)
233+
}
234+
235+
@Test
236+
fun `should be provided from the task parameters, not from the extension`() {
237+
setTestPrivateMethodsInTaskParameters(false)
238+
setTestPrivateMethodsInExtension(true)
239+
assertEquals(false, extensionProvider.testPrivateMethods)
240+
}
241+
242+
private fun setTestPrivateMethodsInExtension(value: Boolean?) {
243+
Mockito.`when`(extensionMock.testPrivateMethods).thenReturn(createBooleanProperty(value))
244+
}
245+
246+
private fun setTestPrivateMethodsInTaskParameters(value: Boolean) {
247+
extensionProvider.taskParameters = mapOf("testPrivateMethods" to "$value")
248+
}
249+
}
250+
214251
@Nested
215252
@DisplayName("testFramework")
216253
inner class TestFrameworkTest {

utbot-maven/docs/utbot-maven.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ For example, the following configuration may be used:
4040
<generatedTestsRelativeRoot>target/generated/test</generatedTestsRelativeRoot>
4141
<sarifReportsRelativeRoot>target/generated/sarif</sarifReportsRelativeRoot>
4242
<markGeneratedTestsDirectoryAsTestSourcesRoot>true</markGeneratedTestsDirectoryAsTestSourcesRoot>
43+
<testPrivateMethods>false</testPrivateMethods>
4344
<testFramework>junit5</testFramework>
4445
<mockFramework>mockito</mockFramework>
4546
<generationTimeout>60000L</generationTimeout>
@@ -79,6 +80,10 @@ For example, the following configuration may be used:
7980
- Mark the directory with generated tests as `test sources root` or not.
8081
- By default, `true` is used.
8182

83+
- `testPrivateMethods`&ndash;
84+
- Generate tests for private methods or not.
85+
- By default, `false` is used.
86+
8287
- `testFramework` &ndash;
8388
- The name of the test framework to be used.
8489
- Can be one of:

utbot-maven/src/main/kotlin/org/utbot/maven/plugin/GenerateTestsAndSarifReportMojo.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,12 @@ class GenerateTestsAndSarifReportMojo : AbstractMojo() {
7171
@Parameter(defaultValue = "true")
7272
internal var markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean = true
7373

74+
/**
75+
* Generate tests for private methods or not.
76+
*/
77+
@Parameter(defaultValue = "false")
78+
internal var testPrivateMethods: Boolean = false
79+
7480
/**
7581
* Can be one of: 'junit4', 'junit5', 'testng'.
7682
*/

utbot-maven/src/main/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProvider.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class SarifMavenConfigurationProvider(
3333
override val markGeneratedTestsDirectoryAsTestSourcesRoot: Boolean
3434
get() = generateTestsAndSarifReportMojo.markGeneratedTestsDirectoryAsTestSourcesRoot
3535

36+
override val testPrivateMethods: Boolean
37+
get() = generateTestsAndSarifReportMojo.testPrivateMethods
38+
3639
override val testFramework: TestFramework
3740
get() = testFrameworkParse(generateTestsAndSarifReportMojo.testFramework)
3841

utbot-maven/src/main/kotlin/org/utbot/maven/plugin/wrappers/MavenProjectWrapper.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,8 @@ class MavenProjectWrapper(
125125
classUnderTest,
126126
sourceCodeFile,
127127
createTestsCodeFile(classFqn),
128-
createSarifReportFile(classFqn)
128+
createSarifReportFile(classFqn),
129+
sarifProperties.testPrivateMethods
129130
)
130131
}
131132

utbot-maven/src/test/kotlin/org/utbot/maven/plugin/extension/SarifMavenConfigurationProviderTest.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,21 @@ class SarifMavenConfigurationProviderTest : AbstractMojoTestCase() {
5252
Assertions.assertEquals(true, configurationProvider.markGeneratedTestsDirectoryAsTestSourcesRoot)
5353
}
5454

55+
@Test
56+
fun `testPrivateMethods should be provided from the configuration`() {
57+
Assertions.assertEquals(true, configurationProvider.testPrivateMethods)
58+
}
59+
5560
@Test
5661
fun `testFramework should be provided from the configuration`() {
5762
Assertions.assertEquals(Junit5, configurationProvider.testFramework)
5863
}
5964

60-
6165
@Test
6266
fun `mockFramework should be provided from the configuration`() {
6367
Assertions.assertEquals(MockFramework.MOCKITO, configurationProvider.mockFramework)
6468
}
6569

66-
6770
@Test
6871
fun `generationTimeout should be provided from the configuration`() {
6972
Assertions.assertEquals(10000, configurationProvider.generationTimeout)

utbot-maven/src/test/resources/project-to-test/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
<generatedTestsRelativeRoot>target/generated/test</generatedTestsRelativeRoot>
3131
<sarifReportsRelativeRoot>target/generated/sarif</sarifReportsRelativeRoot>
3232
<markGeneratedTestsDirectoryAsTestSourcesRoot>true</markGeneratedTestsDirectoryAsTestSourcesRoot>
33+
<testPrivateMethods>true</testPrivateMethods>
3334
<testFramework>junit5</testFramework>
3435
<mockFramework>mockito</mockFramework>
3536
<generationTimeout>10000</generationTimeout>

0 commit comments

Comments
 (0)