Как проверить, когда bean-компонент использует пользовательский Lombok Builder - PullRequest
1 голос
/ 08 апреля 2020

Следующий код работает, когда мой компонент использует аннотации Lombok Builder с пользовательским конструктором.

У меня возникают проблемы с тестированием, когда я хочу создать этот компонент со значениями. Я больше не могу использовать Setters (преднамеренно) и не могу просто использовать .builder () из-за пользовательского компоновщика.

У меня вопрос, как мне создать этот бин в моих тестах? Обратите внимание, что я хочу использовать конструктор и не хочу использовать аннотацию @Value от Lombok. Пользовательский конструктор необходим для работы с Джексоном.

Одна возможность, о которой я могу подумать, - это добавить конструктор в собственный конструктор, который, я надеюсь, мне не понадобится делать только для тестирования.

Пожалуйста, совет. Спасибо.

Настройка рабочего бина.

@Getter
@JsonDeserialize(builder = MyData.MyDataBuilder.class)
@Builder(builderClassName = "MyDataBuilder", toBuilder = true)
public class MyData {
    @JsonProperty("some_key")
    private String skey;
    @JsonProperty("name")
    private String name;

    // needed to work with Jackson
    @JsonPOJOBuilder(withPrefix = "")
    static class MyDataBuilder {}
}

Проверка попытки создания объекта. Следующее не будет работать, как указано выше.

MyData.builder()
    .skey("12345")
    .name("some_name")
    .build();

или

MyData myData = new MyData();
myData.skey("12345");
myData.name("some_name");

1 Ответ

0 голосов
/ 08 апреля 2020

Вы можете настроить класс построителя на любой уровень доступа. Lombok делает его public по умолчанию, если вы его не настраиваете.

Если сам класс и хотя бы один конструктор public, можно создавать экземпляры повсюду (не только в одном пакете). ). Но тогда в большинстве случаев нет причины, по которой класс построителя также не должен быть public: если шаблон построителя выгоден в своем пакете, он, вероятно, будет полезен и везде.

Если вы не Если вы хотите, чтобы ваш класс создавался в других пакетах, то компоновщик не должен быть public (а также не иметь конструктора). Тем не менее, тогда ваш тест также каким-то образом некорректен или находится в неправильном пакете.

Так что либо создайте пользовательский класс компоновщика public, либо измените ваш тест.

...