Skip to content

Java fuzzer can't create any values for types with no public constructor (e.g. LocalDateTime) #2437

Open
@IlyaMuravjov

Description

@IlyaMuravjov
Collaborator

Description

When creating instances of arbitrary classes Java fuzzer only considers their accessible constructors. However, some classes (e.g. LocalDateTime) only have private constructors while their instances are meant to be created using static methods.

Real world (concrete) example

Same as in #2428

To Reproduce

Run the following unit test.

@Test
fun `fuzzer can create instances of classes without public constructors but with static factory method in their class`() {
    var seenLocalDateTime = false
    runBlockingWithContext {
        runJavaFuzzing(
            TestIdentityPreservingIdGenerator,
            methodUnderTest = LocalDateTime::getMinute.javaMethod!!.executableId,
            constants = emptyList(),
            names = emptyList(),
        ) { thisInstance, _, _ ->
            val control = runCatching {
                ValueConstructor()
                    .construct(listOfNotNull(thisInstance?.model))
                    .singleOrNull()?.value
            }.getOrNull()?.let { constructedThisInstance ->
                assertInstanceOf(LocalDateTime::class.java, constructedThisInstance)
                seenLocalDateTime = true
                Control.STOP
            } ?: Control.CONTINUE
            BaseFeedback(Trie.emptyNode(), control)
        }
    }
    assertTrue(seenLocalDateTime) { "No value was generated for type LocalDateTime" }
}

Expected behavior

Test passes.

Actual behavior

Test fails.

Visual proofs (screenshots, logs, images)

No value was generated for type LocalDateTime ==> expected: <true> but was: <false>

Activity

alisevych

alisevych commented on Jul 24, 2023

@alisevych
Member

@IlyaMuravjov
Could you please explain expected and actual behavior more in detail?
Here it is expected to use LocalDateTime static methods to instantiate it.

removed their assignment
on Sep 20, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    comp-fuzzingIssue is related to the fuzzingctg-bugIssue is a buglang-javaIssue is related to Java support

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @alisevych@IlyaMuravjov

      Issue actions

        Java fuzzer can't create any values for types with no public constructor (e.g. `LocalDateTime`) · Issue #2437 · UnitTestBot/UTBotJava