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

如何使用JUnit测试验证实体类-Hibernate@Column注释

杨学真
2023-03-14

我有一组实体类,它们是由Hibernate工具生成的。都有@列注释,如:

@Column(name = "CNTR_DESCRIPTION", nullable = false, length = 5)
public String getDescription() {
    return this.description;
}

我想编写一个JUnit测试来验证我对数据库的输入,但JUnit验证只在添加以下内容时有效:

@NotNull
@Size(max = 5)
@Column(name = "CNTR_DESCRIPTION", nullable = false, length = 5)
public String getDescription() {
    return this.description;
}

我不希望添加任何注释,因为这样我需要更改自动生成的实体类。如何让JUnit测试使用第一个生成的@列注释?谢谢

我的JUnit测试(不适用于仅@列,但适用于额外的@NotNull和@size):

公共类CountryEntityTest{私有静态验证器验证器;

@BeforeClass
public static void setUp() {
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    validator = factory.getValidator();
}

@Test
public void countryDescriptionIsNull() {
    CountryEntity country = new CountryEntity();
    country.setDescription(null);
    Set<ConstraintViolation<CountryEntity>> constraintViolations = validator.validate( country );
    assertEquals( 1, constraintViolations.size() );
    assertEquals( "may not be null", constraintViolations.iterator().next().getMessage() );
}

@Test
public void countryDescriptionSize() {      

    CountryEntity country = new CountryEntity();
    country.setDescription("To long");

    Set<ConstraintViolation<CountryEntity>> constraintViolations = validator.validate( country );

    assertEquals( 1, constraintViolations.size() );
    assertEquals( "size must be between 0 and 5", constraintViolations.iterator().next().getMessage());
}

}

共有1个答案

曹智
2023-03-14

我相信@列中的约束并不是为了进行验证。它们用于生成DDL。因此,您必须添加Hibernate验证器注释来实现您的目标。

参考这篇文章。

 类似资料:
  • 我需要测试验证注释,但看起来它们不起作用。我不确定JUnit是否也是正确的。目前,测试将通过,但您可以看到指定的电子邮件地址是错误的。 JUnit 待测试类别

  • 我有一个使用javax注释的jax-rs项目(

  • 问题内容: 我想对用Apache CXF编写的RESTful接口进行单元测试。 我使用ServletContext来加载一些资源,所以我有: 如果我将其部署在Glassfish上,则会注入ServletContext,并且它会按预期工作。但是我不知道如何将ServletContext注入我的服务类中,以便可以使用JUnit测试对其进行测试。 我使用Spring 3.0,JUnit 4,CXF 2.

  • 我是java新手,我正在编写一个ATM程序,用户可以输入三次pin码,如果他们输入的pin码不正确,他们的卡就会被阻塞。我曾尝试为以下代码编写Junit测试,但似乎无法理解。我有两门课,分别是AtmPin和AtmTester。AtmTester是主类所在的位置。 AtmPin.java AtmTester.java

  • 问题内容: 如何使用休眠注释来验证枚举成员字段?以下内容不起作用: 问题答案: 请注意,您还可以创建一个验证器来检查String是否为枚举的一部分。 这很好,因为您不会丢失“错误值”的信息。您会收到类似的消息 值“ someBadUserType”不是有效的用户类型。有效的UserType值是:PERSON,COMPANY 编辑 对于那些想要非番石榴版本的人,应该使用类似以下的功能: 并要自定义错

  • 问题内容: 如何使用hibernate注释来验证枚举成员字段?以下内容不起作用: 问题答案: 请注意,您还可以创建一个验证器来检查String是否为枚举的一部分。 这很好,因为您不会丢失“错误值”的信息。您会收到类似的消息 值“ someBadUserType”不是有效的用户类型。有效的UserType值为:PERSON,COMPANY 编辑 对于那些想要非番石榴版本的人,它应该可以使用类似以下的