代码之家  ›  专栏  ›  技术社区  ›  k13i

在spock测试中不能使用不可变的dto

  •  0
  • k13i  · 技术社区  · 6 年前

    我有不变的DTO

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

    @Value 注释来自 project lombok . 它将所有字段标记为 private 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 框架还是其他方式?我真的很坚持 @值 注释,我不想删除它。

    1 回复  |  直到 6 年前
        1
  •  0
  •   k13i    6 年前

    龙目岛 @NonFinal 可以在类的上面使用注释,将该类标记为 final . 然后,可以非常容易地创建不可变的dto,并且模仿没有问题。