Skip to content

HasProperty Matcher doesn't work with Java Records #392

@rozagerardo

Description

@rozagerardo

Describe the bug
I have the following simple assertion in my test:

hasProperty("name")

For the following record:

public record AnyDto(
    Long id,
    
    @NotBlank
    String name,
    
    String description) { }

And even though I can see the object does have the property (set with a value), the test fails.

I have tracked this down, and it seems the "issue" is generated in the PropertyUtil class, in the propertyDescriptorsFor method:

return Introspector.getBeanInfo(fromObj.getClass(), stopClass).getPropertyDescriptors();

This is what Introspector.getBeanInfo(fromObj.getClass(), stopClass) retrieves for a Record class:

Screen Shot 2022-10-26 at 15 17 30

If I change the AnyDto to a regular class, the test passes, because the Introspector method above does contain PropertyDescriptors for the class:

Screen Shot 2022-10-26 at 15 21 48

Note: the Record does contain name as a MethodDescriptor, maybe we can rely on these for the Records?

This is a related Stackoverflow Question:
https://stackoverflow.com/questions/66982522/how-can-i-assert-hasproperty-with-a-java-record

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions