我有不可变的DTO
@Value
@Builder
public class UserDto {
Long id;
String username;
}
@Value
注释来自project lombok。
它会将所有字段标记为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
框架中或以任何其他方式有解决方案吗?我真的很注意@Value
注释,我不想删除它。
答案 0 :(得分:0)
Lombok @NonFinal
注释可以在课程上方使用,将此课程标记为非 final
。然后可以非常容易地创建不可变的DTO,并且模拟没有问题。