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

时间:2019-06-23 16:58:43

标签: java junit

我下面提供了一个POJO,

@Setter
@Getter
public 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 个答案:

答案 0 :(得分:1)

  

我想测试timestamp字段是否为OffsetDateTime数据类型。

好的。这里有些猜测,但是我认为您想要/打算做什么:

  • 编写一个单元测试,以显示POJO / DTO中的注释按预期工作...
  • 解析一些JSON字符串时

因此,这里的重点是:

  • 查找一些您认为有效
  • 的示例JSON数据
  • 然后编写一个单元测试,该测试使用杰克逊将JSON字符串反序列化为DTO类的实例
  • 然后您使用一个或多个断言来检查该新创建的OrderDTO
  • 的字段

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

  • 在Java中执行new()并手动填充此类dto的字段并序列化为JSON时,您可以检查字符串是否符合预期
  • 或者,反之亦然:您可以硬编码一个JSON字符串,反序列化它,然后验证/确认您期望的属性(基于您对传入的JSON字符串)确实显示在您的dto中。

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

答案 1 :(得分:0)

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