-
Notifications
You must be signed in to change notification settings - Fork 45
Open
@IlyaMuravjov
Description
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>
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Todo