@Test
void getProperties_fieldProps() {

    AnnosOnFields annosOnFields = new AnnosOnFields();
    annosOnFields.setIncludedField("yes");
    annosOnFields.setReadOnlyField("cheese");
    annosOnFields.setIgnoredField("No");
    final Map<String, PropertyUtil.Prop> propMap = PropertyUtil.getProperties(annosOnFields);
    assertThat(propMap)
            .hasSize(2);
    assertThat(propMap.values().stream()
            .map(PropertyUtil.Prop::getParentObject)
            .map(System::identityHashCode)
            .distinct()
            .collect(Collectors.toList()))
            .containsExactly(System.identityHashCode(annosOnFields));
    testProp(propMap, "includedField", "yes", "yes2", annosOnFields::getIncludedField, String.class);
    testProp(propMap, "readOnlyField", "cheese", "cheese2", annosOnFields::getReadOnlyField, String.class);
    PropertyUtil.Prop includedFieldProp = propMap.get("includedField");
    Assertions.assertThat(includedFieldProp.hasFieldAnnotation(JsonProperty.class))
            .isTrue();
    Assertions.assertThat(includedFieldProp.hasFieldAnnotation(JsonPropertyDescription.class))
            .isTrue();
    Assertions.assertThat(includedFieldProp.hasGetterAnnotation(JsonProperty.class))
            .isFalse();
    Assertions.assertThat(includedFieldProp.hasGetterAnnotation(JsonPropertyDescription.class))
            .isFalse();
    Assertions.assertThat(includedFieldProp.hasAnnotation(JsonProperty.class))
            .isTrue();
    Assertions.assertThat(includedFieldProp.hasAnnotation(JsonPropertyDescription.class))
            .isTrue();
    PropertyUtil.Prop readOnlyFieldProp = propMap.get("readOnlyField");
    Assertions.assertThat(includedFieldProp.hasFieldAnnotation(JsonProperty.class))
            .isTrue();
    Assertions.assertThat(includedFieldProp.hasFieldAnnotation(JsonPropertyDescription.class))
            .isTrue();
    Assertions.assertThat(readOnlyFieldProp.hasFieldAnnotation(ReadOnly.class))
            .isTrue();
}