Невозможно использовать неизменяемый DTO в тесте Спока - PullRequest
0 голосов
/ 30 мая 2018

У меня неизменный DTO

@Value
@Builder
public class UserDto {

    Long id;
    String username;
}

@Value аннотации взяты из проекта ломбок .Все поля помечаются как private и final.Кроме того, класс также помечается как генерируемые методы final и equals() hashCode() и toString().Я нашел это очень удобным при реализации объектов передачи данных

Проблема началась при написании теста с использованием spock framework .Внутри теста я пытаюсь смоделировать какое-то поведение:

userFactory.create(userDto) >> user

выдается исключение:

org.spockframework.mock.CannotCreateMockException: Cannot create mock for class user.dto.UserDto because Java mocks cannot mock final classes.

Есть ли какое-нибудь решение для этого в Spock framework или любым другим способом?Я действительно придерживаюсь аннотации @Value и не хочу ее удалять.

1 Ответ

0 голосов
/ 01 июня 2018

Lombok @NonFinal аннотация может использоваться над классом, чтобы пометить этот класс как non final.Тогда неизменяемый DTO может быть создан очень легко, и с насмешками проблем нет.

...