不能在Spock测试中使用不可变DTO

时间:2018-05-30 09:25:51

标签: java groovy spock dto lombok

我有不可变的DTO

@Value
@Builder
public class UserDto {

    Long id;
    String username;
}

@Value注释来自project lombok。 它会将所有字段标记为privatefinal。此外,类也标记为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注释,我不想删除它。

1 个答案:

答案 0 :(得分:0)

Lombok @NonFinal注释可以在课程上方使用,将此课程标记为 final。然后可以非常容易地创建不可变的DTO,并且模拟没有问题。