不能在斯波克测试中使用不可变的 DTO



我有不可变的DTO

@Value
@Builder
public class UserDto {
Long id;
String username;
}

@Value注释来自龙目岛项目。 它将所有字段标记为privatefinal.此外,类也被标记为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,并且没有模拟问题。

最新更新