为了账号安全,请及时绑定邮箱和手机立即绑定

使用序列化验证数据类型是否正确

使用序列化验证数据类型是否正确

凤凰求蛊 2023-02-16 16:03:50
我在下面提供了一个 POJO,@Setter@Getterpublic class OrderDto extends BaseDto {    @JsonProperty( "products" )    private final List<String> products;    @JsonProperty( "basket_items" )    private final List<BasketItemDto> basketItems;    @JsonProperty( "timestamp" )    @JsonDeserialize( using = JavaOffsetDateTimeDeserializer.class )    @JsonSerialize( using = JavaOffsetDateTimeSerializer.class )    private OffsetDateTime timestamp;    @JsonProperty( "amount" )    private BigDecimal amount;    @JsonProperty( "shop_id" )    private Integer shopId;    ..........................}我想测试该timestamp字段是否是OffsetDateTime数据类型。有可能吗?我该如何编写测试?
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

我想测试时间戳字段是否为 OffsetDateTime 数据类型。

当然。这里有点猜测,但我认为你想要/打算做什么:

  • 编写一个单元测试,表明你的 POJO/DTO 中的注释按预期工作......

  • 解析一些 JSON 字符串时

因此,这里的重点是:

  • 寻找一些你认为有效的示例 JSON 数据

  • 然后编写一个单元测试,使用 jackson 将该 JSON 字符串反序列化为 DTO 类的一个实例

  • 然后你使用一个或多个断言来检查新创建的字段OrderDTO

要添加更多背景信息:请记住,您只在此处定义了一个数据持有者对象。您的 DTO 没有任何您可以测试的行为。唯一值得在这里测试的是:

  • 当您new()在 Java 中执行此操作并手动填充此类 dto 的字段并序列化为 JSON 时,您可以检查字符串是否符合预期

  • 或者,如前所述,反过来:您可以对JSON 字符串进行硬编码,对其进行反序列化,然后验证/断言您期望的属性(基于您对传入 JSON 字符串的了解)确实出现在您的 dto.

最后:如果您没有合适的“输入”JSON 字符串,那么危险但有效的替代方法是:首先编写将已知对象序列化为 JSON 字符串的测试用例。然后反序列化该字符串,并确保反序列化的 dto 与您序列化的匹配。


查看完整回答
反对 回复 2023-02-16
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

你想在哪里/什么时候验证/测试它?您可以使用 bean 验证来验证 pojo 的字段。您也可以为此编写自己的验证器。如何进行 bean 验证:https://www.baeldung.com/javax-validation 使用 spring 进行自定义 bean 验证的示例: https: //www.baeldung.com/spring-mvc-custom-validator


查看完整回答
反对 回复 2023-02-16
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信