Open
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
Type
Projects
Status
Todo