不能在 Spock 测试中使用不可变的 DTO
Cannot use immutable DTO in Spock test
我有不可变的 DTO
@Value
@Builder
public class UserDto {
Long id;
String username;
}
@Value
注释来自 project lombok。
它将所有字段标记为 private
和 final
。此外 class 也被标记为 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
注释,我不想删除它。
Lombok @NonFinal
注释可以在 class 上方使用,将此 class 标记为 non final
。然后可以非常容易地创建不可变的DTO并且模拟没有问题。
我有不可变的 DTO
@Value
@Builder
public class UserDto {
Long id;
String username;
}
@Value
注释来自 project lombok。
它将所有字段标记为 private
和 final
。此外 class 也被标记为 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
注释,我不想删除它。
Lombok @NonFinal
注释可以在 class 上方使用,将此 class 标记为 non final
。然后可以非常容易地创建不可变的DTO并且模拟没有问题。