我有不可变的DTO
@Value
@Builder
public class UserDto {
Long id;
String username;
}
@Value
注释来自龙目岛项目。 它将所有字段标记为private
和final
.此外,类也被标记为final
并生成equals()
hashCode()
和toString()
方法。我发现在实现数据传输对象时非常方便
问题始于使用 spock 框架编写测试时。 在测试中,我试图模拟一些行为:
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
注释,我不想删除它。
可以在类上方使用龙目岛@NonFinal
注释,以将此类标记为非final
。然后可以很容易地创建不可变的 DTO,并且没有模拟问题。