当前位置: 首页 > 知识库问答 >
问题:

测试具有大量属性(和子对象)的bean的验证

司寇苗宣
2023-03-14

使用Springboot 2.5.7和捆绑的Junit5(通过spring boot starter测试),我试图通过定制的标准注释测试我在整个bean中设置的约束。

我找到的大多数留档都是关于jit4的,我找不到一种方法让它在springboot5中工作。

另外,我有点困惑,因为在理想情况下,我想测试每个约束的containt,并且只找到关于如何全局测试它的文档(使用junit4)。

有人已经摆弄过这种测试了吗?

只是为了示例,这里我有一个用于入站SQS事件的bean:

package com.application.sqs.dto.inbound;

import com.application.sqs.dto.validators.ZoneDateTime;
import lombok.Data;

import java.util.List;

@Data
public class SqsEvent {

    private String version;

    private String id;

    private String source;

    private String account;

    @ZoneDateTime(
            message = "Wrong time."
    )
    private String time;

    private String region;

    private List<String> resources;

    private SqsPayload detail;
}

还有一个有效载荷的例子(有很多子对象,经过编辑):

package com.application.sqs.dto.inbound;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.application.sqs.dto.validators.LocalDate;
import lombok.Data;

import javax.validation.constraints.Digits;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.List;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class SqsPayload {
    @JsonProperty("primkey")
    @NotBlank(
            message = "primkey is blank"
    )
    private String primarykey;
    
    @JsonProperty("numb")
    @Pattern(
            regexp="^(A|B)$",
            message = "numb is invalid"
    )
    private String number;

}

例如,我想测试numb只接受A或B,primkey不能为空,以及我的自定义验证器(@ZoneDateTime)是否按预期工作。

非常感谢您的帮助和指导!

最好的

共有1个答案

夏俊人
2023-03-14

尚未针对每个约束完成,但以下是两种可能性。

如果通过javax验证器运行该类的实例,那么每个无效约束将得到一个ConstraintViolation。这样,您就可以验证每个约束是否都得到了所有预期的ConstantViolation。

定义一个有效的模拟对象,然后在每个测试用例中,您只需将一个受约束字段的值更改为一个无效的用例,并确保它捕获它

对于编程javax验证,您可以在这里查看步骤5。

还建议您深入了解可用方法的javax.validation.Validator接口。您还有一个名为validateProperty的方法来针对特定属性。

 类似资料:
  • 我目前有以下情况: 我有一个对象,它可以包含多个对象。对象具有属性:

  • 如何处理对象的javascript数组,例如: 并通过求和这些值合并重复的键。为了得到这样的东西: 我尝试过迭代并添加到一个新数组中,但这没有起到作用:

  • 我正在尝试反序列化一个 JSON 响应,其中包含一些标准字段和一个包含子类属性的 嵌套对象,例如: 字段< code>id和< code>type是标准的,所以我有一个基类< code>Base,然后扩展一些更具体的类: 如何让杰克逊读取 对象作为进一步字段值的来源?我假设我需要创建一个自定义反序列化程序,但我不确定如何具体完成此操作。

  • 本文向大家介绍JavaScript变量Dom对象的所有属性,包括了JavaScript变量Dom对象的所有属性的使用技巧和注意事项,需要的朋友参考一下 DOM对象的HTML:   <button>Disable State</buttom> 1,遍历DOM对象所具有的属性(全部,不管是否在HTML tag中是否设置) 结果: 2.遍历DOM对象在HTML中设置过的属性:   每一个attribut

  • 我正在努力处理一个简单的RxJs查询,但我似乎无法理解。如果观察对象被包装在一个对象中,我似乎不知道如何合并它们。如果我直接从flatMap返回Observable,那么这个示例可以正常工作,但我还需要在输出中输入名称。我怎样才能做到这一点? 我正在使用RxJS 5.0.0-beta.2 基本数据结构: RxJs函数: 预期结果: 实际结果:

  • 因此,通过对Stackoverflow的研究,特别是本主题,我已经确定在一个正常工作的getter/setter设置中嵌入了一个JSON对象字典。当我调用API时,属性的传统getter/setter工作得很好,但这是因为我知道属性的名称。如何使其适用于名为的对象的未知属性,以及该对象的格式是什么()? API响应: 我的POJO: 如何设置getter/setter和正确的字典格式(看起来可能是